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)原理简化详解

Java8 Lambda表达式介绍

Java8新特性 Lambda表达式

Java8新特性你知道Java8为什么要引入Lambda表达式吗?

Java8中Lambda表达式详解

Java8新特性03 Lambda表达式