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滴,目前先有个大概的了解~
Stream知识点总结及源码阅读的更多相关文章
- 【原】AFNetworking源码阅读(三)
[原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data tas ...
- 【原】AFNetworking源码阅读(二)
[原]AFNetworking源码阅读(二) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中我们在iOS Example代码中提到了AFHTTPSessionMa ...
- JDK源码阅读(1)_简介+ java.io
1.简介 针对这一个版块,主要做一个java8的源码阅读笔记.会对一些在javaWeb中应用比较广泛的java包进行精读,附上注释.对于容易混淆的知识点给出相应的对比分析. 精读的源码顺序主要如下: ...
- 【原】AFNetworking源码阅读(四)
[原]AFNetworking源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇还遗留了很多问题,包括AFURLSessionManagerTaskDe ...
- 【原】AFNetworking源码阅读(一)
[原]AFNetworking源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 AFNetworking版本:3.0.4 由于我平常并没有经常使用AFNetw ...
- 【原】SDWebImage源码阅读(三)
[原]SDWebImage源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1.SDWebImageDownloader中的downloadImageWithURL 我们 ...
- 【原】SDWebImage源码阅读(二)
[原]SDWebImage源码阅读(二) 本文转载请注明出处 —— polobymulberry-博客园 1. 解决上一篇遗留的坑 上一篇中对sd_setImageWithURL函数简单分析了一下,还 ...
- 【原】SDWebImage源码阅读(一)
[原]SDWebImage源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 一直没有系统地读过整套源码,就感觉像一直看零碎的知识点,没有系统读过一本专业经典书 ...
- java8 ArrayList源码阅读
转载自 java8 ArrayList源码阅读 本文基于jdk1.8 JavaCollection库中有三类:List,Queue,Set 其中List,有三个子实现类:ArrayList,Vecto ...
随机推荐
- hive (1)Cli命令
查看命令选项 # hive --help Usage ./hive <parameters> --service serviceName <service parameters> ...
- 启动tomcat闪退
启动tomcat,点击startup.bat闪退 使用的Tomcat是免安装版本的. 因为在启动tomcat是需要读取环境变量和配置信息,缺少了这些信息,就不能登记环境变量,导致了tomcat的闪退. ...
- bootstrap select 多选的用法,取值和赋值(取消默认选择第一个的对勾)
h5自带的select标签可以实现按住ctrl键多选的功能,但是样式及其难看. bootstrap select是很好用的前端插件 首先引入bootstrap和bootstrap-select的c ...
- 利用Wireshark抓取并分析OpenFlow协议报文
OpenFlow 交换机与控制器交互步骤 1. 利用Mininet仿真平台构建如下图所示的网络拓扑,配置主机h1和h2的IP地址(h1:10.0.0.1,h2:10.0.0.2),测试两台主机之间的网 ...
- Kafka(三) —— 集群监控
任何应用功能再强大.性能再优越,如果没有与之匹配的监控,那么一切都是虚无缥缈的.监控不仅可以为应用提供运行时的数据作为依据参考,还可以迅速定位问题,提供预防及告警等功能,很大程度上增强了整体服务的鲁棒 ...
- oralce 超过1亿条数据的数据库表清理实践
2018-08-18 16:58 无腿鸟 阅读(331) 评论(0) 编辑 收藏 问题:当一个表的数据量超过一亿条,要删除其中的5000w条,如何处理. 如果直接使用delete语句,会涉及到到大量的 ...
- JSON HiJacking攻击
JSON劫持类似于CSRF攻击,为了了解这种攻击方式,我们先看一下Web开发中一种常用的跨域获取数据的方式:JSONP. 先说一下JSON吧,JSON是一种数据格式,主要由字典(键值对)和列表两种存在 ...
- 手写HashMap实践
1.什么是HashMap 2.源码分析 3.手写实现 4.不足 一.什么是HashMap hash散列 将一个任意长度通过某种算法(hash函数算法)换成一个固定值 map: 地图x,y 存储 总结: ...
- GROUP_CONCAT 将mysql多条数据合并为一条
实现将多条数据合并为一条数据,在mysql中可以通过 GROUP_CONCAT 函数实现 上面是潇leader发我的和工作不相关的小小小需求描述,很明显是要把id和name相同的数据合并为一条,下面按 ...
- HmacSHA256摘要算法2 MACCoder
消息摘要算法分为三类: MD(Message Digest):消息摘要 SHA(Secure Hash Algorithm):安全散列 MAC(Message Authentication Code) ...