Java 8 與Lambda表達式


Java 8 將要推出Lambda表達式,可以在下面的地址了解一下
什么是Lambda表達式,為什么要應用Lambda表達式,Lambda表達式又解決了什么問題之類的。

http://www.lambdafaq.org/

在下列地址可以下載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會對此作出什么反應呢?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM