Java 8 將要推出Lambda表達式,可以在下面的地址了解一下
什么是Lambda表達式,為什么要應用Lambda表達式,Lambda表達式又解決了什么問題之類的。
在下列地址可以下載Java8的JDK和JRE(前瞻版的)2012年12月20日剛放出來的。
http://jdk8.java.net/download.html
而Java8中對於Lambda表達式的支持JDK需要在這個地址下載
http://openjdk.java.net/projects/lambda/
Eclipse目前並不支持Java 8,所以想要調試Java8的話,所以我們用能夠支持Java 8的IntelliJ IDEA開發環境,這個位置有可以運行Java 8的IntelliJ IDEA的EAP下載。
http://confluence.jetbrains.net/display/IDEADEV/IDEA+12+EAP
★建立工程時需要先引入適當的JDK,否則Lambda表達式要么不能編譯,要么不能運行。
那么Lambda表達式在Java中是怎么應用的呢?
比如,我們從一個學生成績單中查找所有及格的學生的處理,在以前的Java代碼中會怎么寫?
1 public class ScoreSheet { 2 List<Score> scores; 3 4 public List<Score> filter() { 5 List<Score> passed = new ArrayList<Score>(); 6 for (Score score : scores) { 7 if (score.score >= 60) { 8 passed.add(score); 9 } 10 } 11 return passed; 12 } 13 }
如果改用Lambda表達式,那么書寫形式是:
1 public class ScoreSheet { 2 public List<Score> scores; 3 4 public List<Score> filter() { 5 return scores.stream().filter(e -> e.score >= 60).into(new ArrayList<Score>); 6 } 7 }
這樣原來7行代碼完成的工作,現在1行就可以了。
關鍵處理就在那個e -> e.score >= 60。這個就是Lambda表達式。
Java8中為了支持Lambda表達式,設立了一個java.util.stream包,下面有個Stream接口。
原有的Collection的實現類,比如List,Map等,都可以通過stream()方法生成Stream對象,從而可以調用其中的filter, sorted等方法利用Lambda表達式對列表進行簡單處理。
如果你上網搜,以前的Java8中的Lambda的例子代碼中並沒有stream()這段處理。
這里是為什么Stream處理不直接在Collection中實現的原因
http://www.lambdafaq.org/why-are-stream-operations-not-defined-directly-on-collection/
Java8中的Lambda表達式支持filter過濾,sorted排序,findFirst查找第一個,findAny查找任何一個,forEach循環所有元素,reduce減少列表元素。
為了實現Lambda表達式,還涉及到判定條件用的處理
Comparator, Function, BinaryOperator,Predicate等。
最后,不知道擁有自己的JDK的Android會對此作出什么反應呢?
