【译】为什么要在Java中加入Lambda表达式

标签: java lambda 表达式 | 发表时间:2014-04-21 14:30 | 作者:nifoo
出处:http://www.iteye.com
原文:http://www.lambdafaq.org/why-are-lambda-expressions-being-added-to-java/
作者:Maurice Naftalin
翻译:长风

Lambda表达式(以及闭包)在许多现代编程语言中都很普及。在为什么要在 Java 平台加入 Lambda 表达式呢?有众多原因中,最主要的原因是在编程时,可以让多线程并行处理 Collection(译注:包括 List 和 Set) 的代码变得容易编写。一般情况,我们写代码操作 List 和 Set,是先获取其迭代器(iterator),然后通过迭代器遍历每个元素,并依次处理。如果我们想要以并行的方式来处理不同的元素,只能我们自己编写代码来处理,Collection 并不提供任何支持。

在 Java 8 中,意图给 Collection 提供一些方法,我们可以给那些方法传入函数,然后方法内部再调用传入的函数去处理 Collection 中的元素。(后面我们会以 forEach 方法作一个例子,传一个函数给它去处理每一个元素)。这个变化会带来一个优点,那就是 Collection 可以在它的内部进行迭代,把客户代码的职责转移到库中。

然后,对客户代码来说,我们还需要提供一个简单的办法来把函数传给 Collection 的那些方法。目前的标准做法是,创建相应接口的一个匿名内部类。但是定义匿名内部类的语法太笨拙了。

例如,Collection 的 forEach 方法接受 Consumer 接口的一个实例,并且为每个元素调用它的accept方法:
interface Consumer<T> {void accept(T t);} 


现在假设我们有一个 list,list 内的元素都是 java.awt.Point 类型的,我们想要使用 forEach 方法来交换每个元素的x和y的值。使用匿名内部类的方式如下:
pointList.forEach(new Consumer<Point>(){  

  public void accept(Point p){  
    p.move(p.y, p.x);  
  }  
});


如果使用 Lambda 表达式,就简洁得多了:
pointList.forEach(p -> p.move(p.y, p.x)); 




已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [java lambda 表达式] 推荐:

[Java 8] Lambda 表达式实例

- - Java - 编程语言 - ITeye博客
Java 8 中的 Lambda 表达式,允许将函数作为形参传递给另外的函数. 为了更好地理解,我们用实例的方式来演示如何使用 Lambda 表达式. 1、Lambda 表达式 Hello World. 这是一个最简单的 Lambda 表达式的例子. 首先在 main 方法的上面声明了一个接口 HelloWorld,在 main 方法中实现了这个接口,随后调用了接口的唯一方法.

【译】为什么要在Java中加入Lambda表达式

- - Java - 编程语言 - ITeye博客
原文:http://www.lambdafaq.org/why-are-lambda-expressions-being-added-to-java/. 作者:Maurice Naftalin. Lambda表达式(以及闭包)在许多现代编程语言中都很普及. 在为什么要在 Java 平台加入 Lambda 表达式呢.

探索Java语言与JVM中的Lambda表达式(译)

- - BlogJava_首页
探索Java语言与JVM中的Lambda表达式.     Lambda表达式是自Java SE 5引入泛型以来最重大的Java语言新特性,本文是2012年度最后一期 Java Magazine中的 一篇文章,它介绍了Lamdba的设计初衷,应用场景与基本语法. (2013.01.02最后更新).

Lambda表达式现状分析

- - InfoQ cn
距明年Java 8发布还有不到一年时间,Brian Goetz发布了最新的 Lambda表达式现状分析,涵盖了Java集合API的改进. Java 8最受期待的特性之一是引入了 Lambda表达式,Java集合API对它的重点支持是确保该类库被广泛使用的关键所在. 如果你不熟悉Lambda表达式的语法,请查看先前的一篇文章 Lambda表达式现状分析以及之前InfoQ的相关报道,以便了解该语法的详细内容.

Java8集合中的Lambda表达式

- - 四火的唠叨
文章系本人原创,转载请保持完整性并注明出自 《四火的唠叨》. 本文翻译自《 Java 8 Explained: Applying Lambdas to Java Collections》. Lambdas表达式是Java 8的主题,在Java平台上我们期待了很久. 但是,如果如果我们不在集合中使用它的话,就损失了很大价值.

基于C++ Lambda表达式的程序优化

- sunnyboy.xue - 搜索研发部官方博客
这是一个关于C\C++程序员的一个小故事,关于C++11——刚刚通过的新标准的一个小故事…. 请不要误会,题目中所提及的“优化”并不是提升程序的性能——Lambda表达式干不了这个. 从本质上来说,它只是一种“语法糖”而已. 不使用这种表达式,我们照样可以写出满足需求的程序. 正如放弃C而使用汇编,或者放弃汇编而使用机器语言一样,你能控制的范围就在那里,不增不减.

Java8之使用新JS解释器Nashorn编译Lambda表达式

- - 并发编程网 - ifeve.com
原文链接  作者: Tal Weiss  CEO of  Takipi   译者:踏雁寻花,xbkaishui  校对:方腾飞. 在最近的一篇 文章中,我了解了一下Java8和Scala是如何实现 Lambda 表达式的. 正如我们所知道的,Java8不仅对javac编辑器做了很大改进,它还加入了一个全新的项目—Nashorn.

【外刊IT评论网】Lambda将从根本上改变我们开发Java程序的方式

- - 外刊IT评论网
当今世界主流编程语言无不吸纳强大的闭包概念,但有个例外,它就是Java. 数年来,Java语言中增加闭包特征的工作看起来毫无进展. 早在15年之前,Scala语言和TypeSafe框架的作者Martin Odersky和 Phillip Wadler发布了实验性的 “Pizza”项目,由此,人们开始试图将闭包纳入编程语言的基本特征之一.

Java的正则表达式匹配汉字

- Macyou - Script Ahead, Code Behind
刚才有同事问,顺便发出来记一下. 以前读《精通正则表达式》的时候已经知道Java的正则表达式支持\p{Inname}的形式来指定匹配属于name的Unicode区块的字符. JDK的Pattern类的文档上也有相关例子,\p{InGreek},表示匹配一个属于名为“Greek”的Unicode区块的字符.

Java 正则表达式 StackOverflowError 问题及其优化

- - leejun_2005的个人页面
正则可以看做一门 DSL,但它却应用极其广泛,可以轻松解决很多场景下的字符串匹配、筛选问题. “ 如果你有一个问题,用正则表达式解决,那么你现在就有两个问题了. 今天我们就来聊聊 Java 正则表达式 StackOverflowError 的问题及其一些优化点. 最近,有同事发现一段正则在本地怎么跑都没问题,但是放到 Hadoop 集群上总会时不时的抛 StackOverflowError.