type
status
date
slug
summary
tags
category
icon
password
本文章介绍了流的各种常用操作。
filter
Map
distinct
distinct 能够去重,主要用了 equals 方法。如果没有重写这两个方法,那么用的是 jdk 自带的equals 去判断,就是==,这样使用 distinct 对于基本数据类型是生效的,对于引用数据类型是不生效的,因为地址不同。
重写 equals 和 hashCode
Sort
sort 主要使用的是compareTo接口,要使用sort 比较的话,需要重写这个方法。
这样才能实现 sort 比较
Limt
limit可以设置对流的大小进行限制,超出限制的就抛弃了。
skip
跳过流中的前 n 个元素
flatMap
作用
map 只能把一个对象转换成另一个对象作为流中的对象,比如把一个集合中对象的某个属性作为流,进行下一步操作。
flatMap,可以把集合中属性的集合对象,作为流操作。
如果直接用 map 的话,我还不会。
用 flatMap 实现
得到都有哪些分类
Author -> bookList-> categary:需要用”,“分割,得到书籍类型,去重,输出
总结:当需要操作的属性是 list时,可以用 flatMap,当操作的属性是基本数据类型时,可以用 map。
终结操作
forEach:遍历
count:获得元素个数
max&min
获取最大和最小
案例:获取书籍最高分和最低分
collect
把流转换成集合
List 集合
Set 集合
Map 集合
anyMatch&allMatch
anyMatch:判断是否有任意符合条件的元素。
allMatch:判断是否全部都符合条件
findAny
获取流中的任意一个元素,不一定是第一个.
findFirst
Reduce
对流中的数据按照你指定的计算方式计算出一个结果(缩紧操作)
reduce 的作用是把 stream 中的元素组合起来,可以给一个初始值,他会按照给的计算方式从流中拿数据依次和初始值进行计算,计算结果再和后面的元素计算。
内部的计算方式大致如下:
例子:
- 求所有作者年龄和
- 使用 reduce 求所有作者年龄中最大的值
一个参数

image-20230910164517885
文档注释代码
意思是把第一个元素作为初始值,不需要指定初始值,后面计算和上面就一样了。
第一个参数作为初始值写法
流注意事项
- 惰性求值(前面已经演示过):如果没有终结操作,那么中间操作都不会执行。
- 流是一次性的:流不能重复使用,一个流经过一次终结操作,这个流就不能被使用了,要重新创建一个流。
- 不会影响原数据,流的数据操作不会影响到原数据。
流不能重复使用
显示流已关闭

image-20230910165752022