001/* 002 * jPOS Project [http://jpos.org] 003 * Copyright (C) 2000-2026 jPOS Software SRL 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Affero General Public License as 007 * published by the Free Software Foundation, either version 3 of the 008 * License, or (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Affero General Public License for more details. 014 * 015 * You should have received a copy of the GNU Affero General Public License 016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 017 */ 018 019package org.jpos.function; 020 021import java.util.Objects; 022import java.util.function.Function; 023 024/** 025 * Three-argument variant of {@link java.util.function.Function}. 026 * 027 * @param <T> first argument type 028 * @param <U> second argument type 029 * @param <V> third argument type 030 * @param <R> result type 031 */ 032@FunctionalInterface 033public interface TriFunction<T, U, V, R> { 034 /** 035 * Applies this function to the given arguments. 036 * 037 * @param t first argument 038 * @param u second argument 039 * @param v third argument 040 * @return the function result 041 */ 042 R apply(T t, U u, V v); 043 044 /** 045 * Returns a composed {@code TriFunction} that first applies this function and 046 * then applies {@code after} to the result. 047 * 048 * @param <K> result type of the composed function 049 * @param after function applied to the result of this function 050 * @return the composed function 051 */ 052 default <K> TriFunction<T, U, V, K> andThen(Function<? super R, ? extends K> after) { 053 Objects.requireNonNull(after); 054 return (T t, U u, V v) -> after.apply(apply(t, u, v)); 055 } 056}