学习stream流

宋红康stream流笔记

stream流概述

把真正的函数式编程引入java中。

使用Stream API操作集合中的数据,就像使用sql执行数据库查询。

collection是静态的内存数据结构,面向内存;stream是有关计算的,面向cpu。

对非关系型数据库数据的过滤,先查到程序里,利用streamAPI实现过滤。

执行流程

  • 步骤一:Stream的实例化
  • 步骤二:一系列中间操作
  • 步骤三:执行终止操作

步骤1:实例化

通过集合调用stream方法:

img

通过数组Arrays工具类获取:

img

通过Stream的of方法,接收可变参数:

img

步骤2:中间操作

中间操作可以链式调用。层层处理。

(1)筛选与切片

快捷键:ctrl + p 查看参数提示

断定型函数式接口,可以用Lambda表达式
img
img

延迟执行:若没有编写终止操作,则中间操作不会真正执行。

添加上终止操作forEach:
img
img

截断流 limit

使元素不超过给定数量。

注意获取的stream是一次性的,一旦执行过终止操作,就失效了。

img

跳过元素 skip(n)

跳过前n个元素,若跳过元素大于实际元素个数,则无输出,不会越界。

img

筛选,去重 distinct()

参照hashCode() 和 equals() 方法去重,所以自定义类必须要重写方法才能实现去重。

img

(2)映射操作

map(),接收一个函数式接口对象,定义函数操作
img

img

(3)排序

注意:stream流不改变源数据,而是返回新的stream。

img

使用定制排序,传入函数式接口对象comparator
img

img

要想逆序排序,可以给compareTo加负号
img

终止操作

匹配与查找

allMatch:是否所有都匹配,返回bool值
img

anyMatch:是否至少有一个匹配
img

findFirst:返回第一个元素
对于返回结果可能为空的,被封装到option中
调用get()可以获得里面的内容
img

count:返回流中元素的总个数
img

注意:max和min方法返回的是比较器认为的最大、最小值
这意味着降序排列,max会返回自然顺序的最小值
max(Comparator c):返回流中元素的最大值,结果在Optional中
img

img

img

min(Comparator c):返回流中元素的最小值,结果在optional中
img

forEach(Consumer c):内部迭代
img

img

归约

reduce(T identity,BinaryOperator):将流中的元素按照BinaryOperator指定的规则结合起来,得到一个值,返回值为T,identity提供一个初值,由于给了初始值,结果不会为空,所以没有封装入optional
binaryOperator继承自BiFunction<T,T,T>,两个自变量一个因变量的类型相同
img

BiFuntion接口的方法为apply
img

img

reduce(BinaryOperator):将流中的元素按照BinaryOperator指定的规则结合起来,得到一个值,返回值为T,由于没有identity提供一个初值,结果可能为空,所以封装入optional

img

收集

由于stream流不会改动源数据,为了保存下中间过程的更改,提供了收集方法。

collect(Collector c):将流转换位其他形式,接收一个Collector接口的实现,用于给Stream中元素作汇总的方法
可以传入Collectors.toXxx方法
img

posted @ 2025-05-21 22:40  violet0evergarden  阅读(13)  评论(0)    收藏  举报