语言的进化是更高层次的抽象,语言设计者完成了更高、更好的抽象,语言的使用者也需要提高自己的抽象能力。技术的进步,要求相关的人员跟进这一进步。举个例子:
1.0 java中使用for-each循环求和的代码:
int sum = 0;
for(int x:numbers) {
sum += x;
}
2.0 貌似设计的不错,但是当用户提出更多的要求,比如求numbers中所有元素的积,求阶层,等等。此时怎么办?更多的人会不加思考的另起炉灶,再码N段代码去实现不同的运算。其实java语言的设计者已经将语言抽象到很高的层次,这时,要求程序的设计者相应提高对问题的抽象层次。
int sum = numbers.stream().reduce(0, (a,b) ->a+b);
这是java8中使用流的相关技术实现的求和,看起来是不是很简单,是的,书写是简单了,但是变得更抽象。抽象意味着要花多一点时间去理解。
numbers.stream() //产生流,
.reduce(0, (a,b) ->a+b); //归约技术,括号内部是Lambda表达式。
Lambda表达式也是java8的新特性,是的表达式转正,可以被当做参数来传递了。java8之前是不可以的。
流与Lambda表达式的结合使我们的工作变得简单,有了这两个技术,要计算numbers中所有元素的积,阶层等,只需要相应替换reduce()括号中的Lambda表达式就可以了。
http://www.cnblogs.com/skywang12345/p/3308556.html#a1 讲解ArrayList非常详尽,明天继续看。