大家好,我是小材鸟,本篇博客将带你了解stream流,如果觉得本篇对你有帮助 的话,可以给博客点一个👍吗?谢谢🌹
并行流:把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流
串行流:串行多个任务的时候,各个任务按顺序执行,完成一个任务后才能完成下一个任务
stream的短路:
因为流里面只放的是操作计算,对第一个元素先mapInt,再对第一个元素filter,这些操作都完了才会对第二个元素操作,但是我们的程序里面第一个元素操作完就是我们要的结果就不会对第二个操作了,第一个不符合,第二个符合就不会对第三个操作了,这就是stream的短路
流中的终结方法:
在Stream调用了终结方法,流的操作就全部终结了,不能继续使用,只能创建新的Stream操作
方法名 | 简述 |
allMatch(predicate p) | 检查是否匹配所有元素 |
anyMatch(predicate) | 检查是否至少匹配一个元素 |
noneMatch(predicate p) | 检查是否没有匹配所有元素 |
findFirst() | 返回第一个元素 |
findAny() | 返回当前流中的任意元素 |
count(Comparator c) | 返回流中元素的总和/(长度) |
max(Comparator c) | 返回流中最大值 |
min(Comparator c) | 返回流中最小值 |
forEach(Comparator c) | stream API使用内部迭代(默认做了外部迭代) |
流中的方法:
maptoInt将数据转换成int类型
maptoDouble将数据转换成double类型
count获取流最后产生的长度/9
distinct 去除重复的元素
anyMatch检查集合中的任意一个元素是否满足条件,满足则返回true
allMatch检查集合中的所有元素是否满足条件,满足则返回true
noneMatch检查集合中的所有元素是否满足条件,不满足则返回true
dropWhile当过滤的条件被触发,则后面的数据全部舍弃
Tackwhile当过滤条件被触发,则输出触发条件的后面所有数
嵌套集合和嵌套数组是一种传统思想
如:List<List<String>> list = new ArraysList<>();
flatMap 返回流的数据
将集合中的每个元素都转成一个流
flatMapToInt 返回的数据转成Int类型
flatMapToDouble 返回的数据转成double类型
flatMapToLong 返回的数据转成Long类型
spik(int)跳过前面n个元素(不包括n),返回新的流
limit(int)提取前n个元素(包括n,返回新的流)
中间方法:
中间方法不会有输出,只有有了终端方法才可以输出
常用的中间方法
filter() | map() | flatMap() | distinct() | sorted() | limit() | skip() |
peek是一个中间方法,
Stream.of(10,20,30).peek(e->sout(e))不会有输出
Stream.of(10,20,30).peek(e->sout(e)).collect(collectors.toList())
输出结果为10 20 30
因为使用了一个终端方法
sorted()对流进行排序并产生新的流
collect()收集流当前的内容
collect(Collectors.joining())将流中的当前数据进行拼接,适用于String拼接场景
reduce()聚合在此经过的所有值,使用于数字计算时
但是需要在后面用get取值