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

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