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

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));

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章