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))
);
}
}