Stream知识点总结及源码阅读
上次【http://www.cnblogs.com/webor2006/p/7795596.html】对Stream进行了简单的学习,这次继续学习Stream,还是结合java8 in action这本书来进行学习。
在书中作者用一个简短的一句话来概括什么是Stream,如下:
而这句话中描述了三个概念:
那结合咱们的代码来进一步阐述下上面的三个概念:
另外Stream操作还有如下两个特点:
而对于用Stream来实现对菜进行过滤的这个代码用图例来表达其操作过程:
另外书中还用一个形象的图来对比Streams和Collections的区别:
另外还有一个图也是用来描述这两者之间的差别滴,再来感受下:
有木有感受到Stream的好处呢,反正目前还不是特别有感觉,希望随着它的深入学习会有比较深刻的印象吧。
另外需要注意的是:
这时咱们来试验一下:
这个毫无疑问肯定是能输出滴:
但是如果再用同一个流再去遍历一次就会抛异常了:
所以说它的操作是一次性的。
下面来看一下Stream operations的概念,其实它是有两种类型的:
下面做一个实验,在每个Intermediate Operations中加一句打印,来看一下输出:
在运行之前先猜测一下输出结果,是先将filtering打印完之后再打印map么?下面看结果:
居然是filter之后立马就map了,跟咱们的预期是不一样的,所以对于这些Intermediate Operations需要注意。
在Stream源码中有很多Intermediate Operations,这里粗略看一下:
这么多方法哪些是Intermediate Operations,哪些又是terminal operations呢?其实=对于这方法在源码中是有对其Operations类型进行注释说明的,比如说:
所以说也不用去记,另外之后会慢慢去学习Stream类中提供强大的API滴,目前先有个大概的了解~