很差意思,最近刷小视频刷的有点上头java
看到这图就不自觉的要来一句:"卧槽,无情"编程
好了,我要开始正经了微信
JAVA 8 已经推出有一段时间了, 相比以前, 咱们操做集合的方式应该是这样?函数式编程
这样?函数
或者是这样?工具
OK, 如今相信你看到这样的遍历方式可能也会吐槽一番优化
Stream 是用函数式编程方式在集合类上进行复杂操做的工具,其集成了Java 8中的众多新特性之一的聚合操做,开发者能够更容易地使用Lambda表达式,而且更方便地实现对集合的查找、遍历、过滤以及常见计算等本篇只举例list和map, 为了便于理解, 咱们先建立一个数据类
PS:为了解决屏幕空间, 注释不标准, 请忽略url
首先咱们先操做List插件
遍历全部人员的名字3d
2.过滤年龄大于12的
3.过滤年龄大于12的总人数
4.根据年龄排序
5.得到年龄最小的
6.年龄最大的
7.将全部的名字打印出来并用逗号隔开
8.全部人年龄的总和
9.关于统计类 IntSummaryStatistics
-------------我是一条红色的分界线-----------
关于Map中Stram的操做
1.list转map
2.在转换过程当中, key重复的状况的处理方式
(key1,key2) -> key2是一种表达式, 表示转换map时,若是有两个相同的key,
则取后面的key2替换前面的key1,key1,key2两个关键字能够随意修改.
3.key重复时,将前面的value和后面的value相加
小结:
先说下Stream的优点:它是java对集合操做的优化,相较于迭代器,使用Stream的速度很是快,而且它支持并行方式处理集合中的数据,默认状况能充分利用cpu的资源。同时支持函数式编程,代码很是简洁。
Stream是一种用来计算数据的流,它自己并无存储数据。你能够认为它是对数据源的一个映射或者视图。
它的工做流程是:获取数据源->进行一次或屡次逻辑转换操做->进行归约操做造成新的流(最后能够将流转换成集合)。
Stream的特性
1.中间操做惰性执行:一个流后面能够跟随0到多个中间操做,主要目的是打开流,并无真正的去计算,而是作出某种程度的数据映射/过滤,而后返回一个新的流,交给下一个操做使用。这类操做都是惰性化的(lazy),就是说,仅仅调用到这类方法,并无真正开始流的遍历,并无消耗资源。
还有多个中间操做的话,这里的时间复杂度并非n个for循环,转换操做都是 lazy 的,多个转换操做只会在 Terminal 操做的时候融合起来,一次循环完成。能够这样简单的理解,Stream 里有个操做函数的集合,每次转换操做就是把转换函数放入这个集合中,在Terminal操做的时候循环 Stream 对应的集合,而后对每一个元素执行全部的函数。
2.流的末端操做只能有一次:当这个操做执行后,流就被使用“光”了,没法再被操做。因此这一定是流的最后一个操做。以后若是想要操做就必须新打开流。
关于流被关闭不能再操做的异常:
这里曾经遇到过一个错误:stream has already been operated upon or closed
意思是流已经被关闭了,这是由于当咱们使用末端操做以后,流就被关闭了,没法再次被调用,若是咱们想重复调用,只能从新打开一个新的流.
OK, 到此, 本文暂时告一段落, 以后的代码中会大量体现stream和lambda表达式的代码, 但愿你们持续关注
下一篇, 将给你们带来一个福利插件, 但愿关注
原创:微微蓝
想要提高本身,工做中遇到的问题,更多JAVA技术相关文章,微信扫一扫关注做者公众号