环球快播:图文分解 Java8 Stream 源码的奥秘
小伙伴们好呀,我是 4ye,今天来分享下 Java8 Stream 的源码
核心回顾
整体概览
这里列出一些重要的类,是看源码过程中必须了解的。
(资料图片仅供参考)
源码中涉及到 N 多的内部类,这个是删减后的版本
比如 :
Sink接口是数据实际操作的地方,核心方法: begin,accept,endAbstractPipeline抽象类是核心的数据结构,双链表demo代码
这里沿用上文的例子
Student aStud = new Student(1, "a"); Student bStud = new Student(2, "b"); Student cStud = new Student(3, null);// 集合的创建 一 List<Student> collect1 = Stream.of(aStud, bStud, cStud).collect(Collectors.toList()); collect1.forEach(System.out::println); List<String> studNameList = studentList.stream() .map(Student::getName) .filter(Objects::nonNull) .map(String::toUpperCase) .sorted() .map(e -> e + "c") .collect(Collectors.toList());
步骤解析
都在这里了
这里步骤太多了,就不一一放出来了 ,列下核心
wrapSink, 创建 Sink 链,将管道的 Sink 操作连接在一起copyInto , 处理数据wrapSink()
开始套娃,从 ReducingSink 往前套
opWarpSink 方法调用的是每一步 中间操作中的方法
通过 单链表的形式将他们联系在一起
Sink 链创建结果
copyInto()
这里判断是不是 短路操作,然后就去执行 Sink 的 begin,accept,end 方法。
通过 forEachRemaining进行内部迭代,这个是 Spliterator的方法。
map 链节点,直接调用传进来的方法,
filter 链节点,多一步判断
sorted 节点,添加到 list 中。
不过别担心, sorted 链节点中它重写了这个 end,并开启对新数据的新一轮遍历!
最后呢,是来到终止操作 TerminalOp中的 accept,这里执行的是 list 的 add 方法(我们调用 Collectors.toList()中构建的),至此,数据添加到 state 中
获取数据,ReducingSink 继承了 Box 这个抽象类,最后 get 方法得到结果。
总结
代码对应的执行流程
先创建流,出现了 Head 节点创建中间管道 Pipeline调用终端操作后有三步 (一)将中间管道的 Sink 操作连接在一起 (wrapSink) (二)处理数据 (copyInto),主要调用 Sink 中的 begin,accept(核心),end 操作 (三)返回结果,ReducingSink 中的 get方法那么,这个 stream 的原理机制就出来了:
此外,源码的 链式调用API 写法,设计模式 的使用以及 泛型 ,四大函数式接口组合构建的高度抽象,封装写法,对我们的编码能力,源码阅读能力也有很大的帮助!
比如 这个 Consumer+Function 接口的组合,配合泛型上下限的使用
源码中 访问者模式,工厂模式等设计模式的影子
工厂模式
对 stream 的特点更加熟悉
比如:
stream 是一次性的,不是数据结构,不存储数据,不改变源数据.。中间操作是惰性的,遇到 终端操作才真正执行有状态的中间操作的特殊之处在于多迭代一次内部迭代终端操作主要做了两件事,串连中间操作,调用 accept 方法处理数据最后
关键词:
推荐阅读
航天员出舱七个小时怎么喝水?太空行走的危险和好处是什么?
航天员出舱七个小时怎么喝水?7月4日,中国宇航员刘伯明和汤洪波出航活动,整个进程持续了7个多小时。据报道,宇航员在舱外服里有饮水袋,在 【详细】
NASA毅力号录下了来自火星的声音 毅力号录下了来自火星的声音怎么回事?
NASA毅力号录下了来自火星的声音近日,有报道称,NASA毅力号录下了来自火星的声音,这非常的奇妙,相信大家十分的感兴趣,下面一起去看看吧 【详细】
北京上空现三个太阳 古代幻日现象预兆什么?
北京上空现三个太阳北京上空现三个太阳 专家释疑今日登上热搜,主要是在12月29日有网友拍到北京上空出现了三个太阳。对于这一现象气象专家 【详细】
十大名车车标 世界十大名车车标简介
十大名车车标 世界十大名车车标简介很多爱车人士对于车标是十分熟悉的,基本可以做到看一眼就知道是哪个品牌的车,世界名车更是如此,许多 【详细】
塑料袋属于什么 四种垃圾分类简介
塑料袋属于什么塑料袋是干垃圾。湿垃圾是指易腐烂的垃圾,通常是厨房垃圾。塑料袋不容易腐烂降解,是干垃圾。就是我们常说的白色污染,所以 【详细】
相关新闻
- 焦点精选!抖音货架电商新机会 04:搜索运营及优化技巧!
- 环球快播:图文分解 Java8 Stream 源码的奥秘
- 从中兴通讯的2022年财报看,欧美市场的坑,国内市场补上了
- 软联科技智能会议预约系统 开启高效办公新体验 全球观点
- 当前资讯!失去中国市场的三星继续称霸全球,中国手机却在快速衰退
- 2100年(2100年是什么年?)
- 为歌而赞哪个app可以看(为歌而赞在哪个app可以看)-前沿资讯
- 美的破壁机打豆浆?
- 即时看!风靡全球的创新品类,雨果跨境展览会助你出口可溶性微晶美容贴片
- 深演智能积极推进供给侧技术创新,赋能企业营销数字化转型升级
- 环球视点!阿里裁员13616人,能唤醒互联网企业的良知吗?
- 环球焦点!微信的那些“变态”功能,让人防不胜防!
- 全球快讯:跨境电商DIY定制类产品设计和汇出系统
- 全球快消息!电磁波是什么(什么是电磁波)
- 苏尼特左旗气象台发布大风蓝色预警【IV级/一般】
- 世界短讯!智慧游泳馆管理系统的功能是什么?有哪些优势?
- 太空电梯到月球基地,太空旅游有多酷?
- 高校发明专利产业化率仅为3.9%,急需既懂科技又懂市场的“经纪人” 谁来唤醒“沉睡”的科技成果 最新消息
- 难道国人就真的只会复制?
- 今日播报!Meta再次大裁员削减1万人,并关闭5000个空缺职位