鲜活的java 8 --- java 8 进化之路(三)

2014-11-23 22:14:57 · 作者: · 浏览: 1
ore myScore) { List tmp = new ArrayList (); //myScore = new Score(); compile wrong //这里的myScore在语义上是final的, 但是myScore中的域可以变化 //myScore.score = 3; 这个是正确的,放在lamda表达式中也正确。 //所以对于myScore而言lamda表达式并不是threadSafe scores.stream().filter((a) -> {return a > myScore.score;}).forEach((a)->{tmp.add(a);}); return tmp; } } public static void main(String[] args) { Arrays.asList().forEach((a)->System.out.println("I'm "+a)); List k = new ArrayList (); k.add(1); k.add(2); k.add(3); k.add(8); k.add(11); k.add(20); k.add(50); Score s = new Score(); s.score = 11; s.findLarger(k).forEach(a->{System.out.println(a);}); System.out.println("dsdsd"); Score.findLarger(k, s).forEach(a->{System.out.println(a);}); } }

参数里面没有final变量,java8在语法上并不要求外部引用参数是final,但是语义上还是final的,这个类似匿名内部类。另外this指针一定是外层类的指针。lamda表达式是没有this的。


现在java的jdk已经可能非常容易的使用多核资源。所以非常期待java以后的jdk能够利用多机器的资源例如现在的map/reduce.这样写程序就越来越简单了。看起来就是这样一个趋势~~~继续进化吧~