流之各种操作
2025-4-20
| 2025-4-20
Words 2066Read Time 6 min
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 求所有作者年龄中最大的值

一个参数

notion image
image-20230910164517885

文档注释代码

意思是把第一个元素作为初始值,不需要指定初始值,后面计算和上面就一样了。
第一个参数作为初始值写法

流注意事项

  • 惰性求值(前面已经演示过):如果没有终结操作,那么中间操作都不会执行。
  • 流是一次性的:流不能重复使用,一个流经过一次终结操作,这个流就不能被使用了,要重新创建一个流。
  • 不会影响原数据,流的数据操作不会影响到原数据。

流不能重复使用

显示流已关闭

notion image
image-20230910165752022

stream对原数据的影响

浮动以及浮动的副作用求1-2-n-中等
Loading...