[FAQ]为什么引入lambda表达式

来源:互联网 发布:淘宝如何返利 编辑:程序博客网 时间:2024/05/21 09:01

Lambda表达式(闭包)在很多现代化的编程语言中很常见。在Java平台上引入lambda表达式的一个最主要原因是方便多线程的处理集合。目前,对于listset等集合类典型的操作方式是使用迭代器。如果需要并行的处理集合,需要编写客户端代码来处理,而不是集合本身处理。


Java8中,引入闭包的目的就是为了给集合提供函数式的方法,方便处理。这样所带来的好处是,集合能够自己组织他们的元素,而不需要客户端代码来处理。但是,为了使得客户端代码能够使用这一改进,必须给集合添加函数式方法。当前通用的做法是使用匿名类。但是声明匿名类带来了过多的标准化代码。


举例来说,forEach方法接受一个Consumer接口的实例并为每个元素调用它的accept方法:

interface Consumer<T> { void accept(T t); }


假设我们要使用forEach调换java.awt.Point的集合的每个元素的xy的坐标。使用Consumer的匿名内部类,我们需要编写类似如下的代码

pointList.forEach(new Consumer() {
public void accept(Point p) {
p.move(p.y, p.x);

});


而如果使用lambda表达式,我们只需要这样:

pointList.forEach(p -> p.move(p.y, p.x));

原创粉丝点击