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

原文: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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值