Stream API
【包】java.util.stream
Stream API是JDK8的新特性,实质上实现了函数式编程
一、认识一下Stream
在java中有一类类,叫做集合(Collection),其功能是用于在内存中存储数据。Stream这个类与集合有很亲密的关系,它是用来处理数据的。
Collection VS Stream
Collection | Stream |
---|---|
面向内存编程 | 面向CPU/计算编程 |
操作会改变存储的数据 | 操作不会改变源数据,而是创建了新的Stream对象 |
操作没有区分,任何时候都可以对数据进行处理 | Stream一旦终止操作输出结果,便不能再进行处理 |
Stream相关的API分为三类
- 创建:创建Stream流对象
- 中间操作:对Stream中数据进行处理
- 终止操作:对Stream结果进行“输出”
- 输出不是指狭义的输出结果,而是指真正生成一个表示Stream结果集的操作
二、Stream的API操作
具体使用介绍参见:https://blog.csdn.net/weixin_37948888/article/details/96995312
概述
1、创建
四种方式
- 集合对象调用默认方法
stream()/parallelStream()
- 数组工具类
Arrays.stream(数组)
- Stream的静态方法创建有限流
Stream.of(多个值)
- Stream的静态方法创建无限流
Stream.generate(Math::random)
2、中间操作
1)筛选和切片——元素类型不会发生变化
- 过滤不需要的元素
filter(Predicate)
- 只要前n个元素
limit(n)
- 不要前n个元素
skip(n)
- 依据hashCode和equals去除重复元素
distinct()
2)映射——元素的类型发生了变化
map(Function)
flatMap(Function)
:方面处理集合套集合的情况
3)排序
- 自然排序,要求元素类型实现了Comparable接口
sorted()
- 定制排序
sorted(Comparator)
3、终止操作
1)匹配和查找
- 判断是否全部元素都满足断定条件
allMatch(Predicate)
- 判断是否存在元素都满足断定条件
anyMatch(Predicate)
- 判断是否全部元素都不满足断定条件
noneMatch(Predicate)
- 返回第一个元素
findFirst()
- 返回任意一个元素
findAny()
- 统计流中数据个数
count()
- 返回元素最大值
max(Comparator)
- 返回元素最小值
min(Comparator)
- 遍历每一个元素
forEach(System.out::println)
2)归约——进行统计计算
reduce()
3)收集——将结果集转换成集合对象
collect()