java8:lambda级联表达式(Cascading)或柯里化(Currying)原理简化详解
Posted 菠萝科技
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java8:lambda级联表达式(Cascading)或柯里化(Currying)原理简化详解相关的知识,希望对你有一定的参考价值。
lambda :级联表达式(Cascading lambdas)或柯里化(Currying)。
柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。这个技术由 Christopher Strachey 以逻辑学家 Haskell Curry 命名的,尽管它是 Moses Schnfinkel 和 Gottlob Frege 发明的。
举个简单的例子:
Function<Integer, Predicate<Integer>> cfun= x -> y -> y > x;
public static void main(String[] args)
Function<Integer, Predicate<Integer>> cfun= x -> y -> y > x;
System.out.println(cfun.apply(2).test(1));
//应用:取大于50的数据
list.stream.filter(cfun.apply(50));
如何一步步简化
从最开始的表达式-->级联表达式
Function<Integer, Predicate<Integer>> cfun= (x) ->
Predicate<Integer> isGreaterThanPivot = (y) ->
return y> x;
;
return cfun;
;
删除多余的 (),以及外部 lambda 表达式中不必要的临时引用
Function<Integer, Predicate<Integer>> cfun= x-> return y-> return y> x; ; ;
lambda 表达式的主体只有一行,显然 和 return 是多余的
Function<Integer, Predicate<Integer>> cfun= x -> y -> x > y;
类似的加一个数值:
Function<Integer, UnaryOperator<Integer>> cfun= x -> y -> x + y;
System.out.println(cfun.apply(1).apply(2));
去重。
用处不是太多。应用举例:
https://blog.csdn.net/wabiaozia/article/details/119152681 里 Java8 Builder 链式调用示例节。
参考链接:
感谢 Venkat Subramaniam 博士
Venkat Subramaniam 博士站点:http://agiledeveloper.com/
以上是关于java8:lambda级联表达式(Cascading)或柯里化(Currying)原理简化详解的主要内容,如果未能解决你的问题,请参考以下文章
java8:lambda级联表达式(Cascading)或柯里化(Currying)原理简化详解