@@ -0,0 +1,2566 @@
+/*%0A * Copyright (c) 2013-2018 Cinchapi Inc.%0A *%0A * Licensed under the Apache License, Version 2.0 (the %22License%22);%0A * you may not use this file except in compliance with the License.%0A * You may obtain a copy of the License at%0A *%0A * http://www.apache.org/licenses/LICENSE-2.0%0A *%0A * Unless required by applicable law or agreed to in writing, software%0A * distributed under the License is distributed on an %22AS IS%22 BASIS,%0A * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.%0A * See the License for the specific language governing permissions and%0A * limitations under the License.%0A */%0Apackage com.cinchapi.common.function;%0A%0Aimport java.util.Objects;%0Aimport java.util.function.BiFunction;%0Aimport java.util.function.Function;%0A%0A/**%0A * Represents a function that accepts three arguments and produces a result.%0A * This is the three-arity specialization of %7B@link Function%7D.%0A *%0A * %3Cp%3E%0A * This is a %3Ca href=%22package-summary.html%22%3Efunctional interface%3C/a%3E%0A * whose functional method is %7B@link #apply(Object, Object, Object)%7D.%0A *%0A * @param %3CF%3E the type of the first argument to the function%0A * @param %3CS%3E the type of the second argument to the function%0A * @param %3CT%3E the type of the third argument to the function%0A * @param %3CR%3E the type of the result of the function%0A *%0A * @see Function%0A * @see BiFunction%0A * %0A * @author Jeff Nelson%0A */%0A@FunctionalInterface%0Apublic interface TriFunction%3CF, S, T, R%3E %7B%0A%0A    /**%0A     * Applies this function to the given arguments.%0A     * %0A     * @param f the first function argument%0A     * @param s the second function argument%0A     * @param t the third function argument%0A     * @return the function result%0A     */%0A    public R apply(F f, S s, T t);%0A%0A    /**%0A     * Returns a composed function that first applies this function to%0A     * its input, and then applies the %7B@code after%7D function to the result.%0A     * If evaluation of either function throws an exception, it is relayed to%0A     * the caller of the composed function.%0A     *%0A     * @param %3CV%3E the type of output of the %7B@code after%7D function, and of the%0A     *            composed function%0A     * @param after the function to apply after this function is applied%0A     * @return a composed function that first applies this function and then%0A     *         applies the %7B@code after%7D function%0A     * @throws NullPointerException if after is null%0A     */%0A    default %3CV%3E TriFunction%3CF, S, T, V%3E andThen(%0A            Function%3C? super R, ? extends V%3E after) %7B%0A        Objects.requireNonNull(after);%0A        return (F f, S s, T t) -%3E after.apply(apply(f, s, t));%0A    %7D%0A%0A%7D%0A

add TriFunction functional interface