package com.apobates.forum.utils.lang;

import org.apache.commons.lang3.tuple.ImmutableTriple;

/**
 * 三个参数的执行函数
 * 
 * @param <T> 条件的第一个参数类型
 * @param <U> 条件的第二个参数类型
 * @param <V> 条件的第三个参数类型
 * @author xiaofanku
 * @since 20200805
 */
public interface TriPredicateFunction<T, U, V> {
    /**
     * 返回函数的执行条件
     * @return 
     */
    public TriPredicate<T, U, V> getCondtion();
    
    /**
     * 返回函数的参数
     * @return 
     */
    public ImmutableTriple<T, U, V> getArgument();
    
    /**
     * 为执行条件绑定参数并执行
     * @return 
     */
    default boolean execute(){
        return getCondtion().test(getArgument().getLeft(), getArgument().getMiddle(), getArgument().getRight());
    }
}
