java8以上的函数式接口支撑三个以上参数


    java8里面增加了java.util.function.Function和lambda
有了这两个东东 就可以 实现函数式编程的特征了。如果有两个参数的函数可以用BiFunction,但是三个以上怎么弄啦?

其实很简单,直接上代码:

参照BiFunction , 然后新建一个接口ThreeParamFunction

public interface ThreeParamFunction {
    R apply(T1 t1,T2 t2,T3 t3);
}

然后来使用这个接口

public class FunctionTest {

    public static void main(String[] args) {
        ThreeParamFunction threeParamFunction1 = (a, b, c)->a+b+c;
        System.out.println(
            threeParamFunction1.apply(1,2,3)
        );

        ThreeParamFunction threeParamFunction2 = (a, b, c)->(a+b+c).length();
        System.out.println(
            threeParamFunction2.apply("a","bb","ccc")
        );
    }

}

如果需要四个或者五个以及更多都可以以此类推

public interface FourParamFunction {
    R apply(T1 t1,T2 t2,T3 t3,T4 t4);
}
public interface FiveParamFunction {
    R apply(T1 t1,T2 t2,T3 t3,T4 t4,T5 t4);
}

其他的Consumer之类也可以这样弄

public interface FiveConsumer {
    void accept(T t, U1 u,U2 u2,U3 u3,U4 u4 );
}

还有一个方式可以用柯里化的办法,但是麻烦不太推荐。

上代码:

import java.util.function.Function;

public class KeliDemo2 {

    public static int funcP31(int p1,int p2,int p3){
        return (p1+p2)*p3;
    }

    public static int funcP32(int p1,int p2,int p3){
        return (p1+p2)/p3;
    }

    public static int funcGaojieStatic(int arg1,Function>> triFunc){
        return triFunc.apply(arg1).apply(3).apply(5);
    }


    public static void main(String[] args) {
        System.out.println(
                funcGaojieStatic(1,x -> y -> z -> funcP31(x,y,z))
        );

        System.out.println(
                funcGaojieStatic(12,x -> y -> z -> funcP32(x,y,z))
        );
    }

}

你可能感兴趣的:(java8以上的函数式接口支撑三个以上参数)