6. 级联表达式和柯里化

柯里化:有多个箭头的 lambda 表达式,把多个参数的函数转换为只有一个参数的函数。
例如:

x -> y -> x + y 

这样子的。

可以这样理解:输入了 X 返回了 (y -> x + y), 再拆,输入了 y 返回了 x + y。

所以可写成:

Function<Integer, Function<Integer, Integer>> fun =  x ->y -> x + y;  

如上,这就是级联表达式。

继续刚才的代码,使用

System.out.println(fun.apply(2).apply(3)); 

来调用,运行输出结果 5。

柯里化的意义: 把函数标准化。

柯里化后,所有的函数都只有一个参数,调用起来就比较灵活,可以使用一些灵活的特性,比如把函数组合起来,

做过前端的同学可能会遇到过这个题目:

实现 var a = add(2)(3)(4);  // 9

我们在 Java 里面可以这么做:

Function<Integer, Function<Integer, Function<Integer, Integer>>> fun2 = x -> y -> z -> x + y + z;
System.out.println(fun2.apply(2).apply(3).apply(4));

还可以这样做:

int[] nums = {2, 3, 4};
Function f = fun2;
for (int i = 0; i < nums.length; i++){
    if (f instanceof Function){
        Object obj = f.apply(nums[i]);
        if (obj instanceof Function){
            f = (Function) obj;
        } else {
            System.out.println(" end: " + obj);
        }
    }
}

这就是高阶函数:返回函数的函数。

代码地址: https://github.com/hmilyos/lambda-demo.git

猜你喜欢

转载自blog.csdn.net/weixin_33708432/article/details/87273099