Java 8 与Lambda表达式
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会对此作出什么反应呢?