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会对此作出什么反应呢?

posted @ 2012-12-25 21:11  史蒂芬.王  阅读(5424)  评论(0编辑  收藏  举报