[FAQ]为何引入lambda表达式
[FAQ]为什么引入lambda表达式
Lambda表达式(闭包)在很多现代化的编程语言中很常见。在Java平台上引入lambda表达式的一个最主要原因是方便多线程的处理集合。目前,对于list和set等集合类典型的操作方式是使用迭代器。如果需要并行的处理集合,需要编写客户端代码来处理,而不是集合本身处理。
在Java8中,引入闭包的目的就是为了给集合提供函数式的方法,方便处理。这样所带来的好处是,集合能够自己组织他们的元素,而不需要客户端代码来处理。但是,为了使得客户端代码能够使用这一改进,必须给集合添加函数式方法。当前通用的做法是使用匿名类。但是声明匿名类带来了过多的标准化代码。
举例来说,forEach方法接受一个Consumer接口的实例并为每个元素调用它的accept方法:
interface Consumer<T> { void accept(T t); }
假设我们要使用forEach调换java.awt.Point的集合的每个元素的x与y的坐标。使用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));