From a63641126181ac7ef91789af428075cac71c1770 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Tue, 17 Nov 2020 02:59:59 +0100 Subject: [PATCH] Update IOTriConsumer.java --- .../commonutils/functional/IOTriConsumer.java | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/main/java/org/warp/commonutils/functional/IOTriConsumer.java diff --git a/src/main/java/org/warp/commonutils/functional/IOTriConsumer.java b/src/main/java/org/warp/commonutils/functional/IOTriConsumer.java new file mode 100644 index 0000000..6b496a3 --- /dev/null +++ b/src/main/java/org/warp/commonutils/functional/IOTriConsumer.java @@ -0,0 +1,55 @@ +package org.warp.commonutils.functional; + +import java.io.IOException; +import java.util.Objects; +import java.util.function.Consumer; + +/** + * Represents an operation that accepts three input arguments and returns no + * result. This is the three-arity specialization of {@link Consumer}. + * Unlike most other functional interfaces, {@code TriConsumer} is expected + * to operate via side-effects. + * + *

This is a functional interface + * whose functional method is {@link #accept(Object, Object, Object)}. + * + * @param the type of the first argument to the operation + * @param the type of the second argument to the operation + * @param the type of the thord argument to the operation + * + * @see Consumer + * @since 1.8 + */ +@FunctionalInterface +public interface IOTriConsumer { + + /** + * Performs this operation on the given arguments. + * + * @param t the first input argument + * @param u the second input argument + * @param v the third input argument + */ + void accept(T t, U u, V v) throws IOException; + + /** + * Returns a composed {@code TriConsumer} that performs, in sequence, this + * operation followed by the {@code after} operation. If performing either + * operation throws an exception, it is relayed to the caller of the + * composed operation. If performing this operation throws an exception, + * the {@code after} operation will not be performed. + * + * @param after the operation to perform after this operation + * @return a composed {@code TriConsumer} that performs in sequence this + * operation followed by the {@code after} operation + * @throws NullPointerException if {@code after} is null + */ + default IOTriConsumer andThen(IOTriConsumer after) { + Objects.requireNonNull(after); + + return (l, r, u) -> { + accept(l, r, u); + after.accept(l, r, u); + }; + } +}