Stream API
Stream API
StreamAPI(java.util.stream)把真正的函数式编程风格引入到Java中,这是目前为止对Java类库最好的补充
StreamAPI实现将数据在后端去操作
StreamAPI和集合框架的区别
- Stream API关注的是数据的计算(排序、查找、过滤、映射、遍历),面向CPU
- 集合关注的是数据的存储,面向内存的
- Stream API之于集合,类似于SQL之余数据表的查询
使用说明
- Stream自己不会存储元素
- Stream不会改变源对象,相反,他们会返回一个持有结果的新Stream
- Stream操作时延迟进行的,这意味着它们会等到需要结果的时候才执。一旦中途执行中止操作,就执行中间操作链,并产生结果
- Stream一旦执行了终止操作,就不能再调用其他中间操作或终止操作了
Stream执行流程
Steam的实例化
一系列的中间操作
执行中止操作
创建Stream
创建Stream方式一:通过集合
结构Collection中提供了一个stream方法,可通过集合获取顺序流和并行流
1 | |
创建Stream方式二:通过数组
调用Arrays类的static <T> Stream <T> stream(T[] array):返回一个流
1 | |
创建Stream方式三:通过Stream的of()
1 | |
Stream的中间操作(方法)
在此我们建立一个实体类Employee
1 | |
在此我们建立一个数据集合类EmployeeDate,此类中有get方法返回一个Employee类型的List集合
1 | |
筛选与切片
| 方法名 | 说明 |
|---|---|
| filter() | 过滤 |
| limit() | 截取 |
| skip() | 跳过 |
| distinct() | 筛选(去重) |
1 | |
映射
| 方法名 | 说明 |
|---|---|
| map(Function f) | 接受一个函数作为参数,将元素转换为其他形式或提取信息 |
该方法会被应用到每一个元素上
1 | |
排序
| 方法名 | 说明 |
|---|---|
| sorted() | 自然排序(默认升序) |
| sorted(Comparator com) | 定制排序(默认升序) |
| sorted((s1,s2)->-s1.compareTo(s2)) | 降序排列 |
1 | |
Stream的终止操作
匹配与查找
| 方法名 | 说明 |
|---|---|
| allMatch() | 全部元素匹配条件才为true |
| anyMatch() | 有一个元素匹配条件就为true |
| findFirst() | 返回第一个元素 |
1 | |
| 方法名 | 说明 |
|---|---|
| count() | 返回流中元素的个数 |
| max(Comparator c) | 返回最高的 |
| min(Comparator c) | 返回最低的 |
1 | |
返回最低工资同理
| 方法名 | 说明 |
|---|---|
| forEach(Consumer c) | 内部迭代 |
1 | |
list集合的遍历方式
- 使用Iterator
- 增强for
- 一般for
- forEach**(新增)**
1 | |
归约
| 方法名 | 说明 |
|---|---|
| reduce(T identity, BinaryOperator) | 可以将流中元素反复结合起来,得到一个值,返回T |
| reduce(BinaryOperator) | 可以将流中元素反复结合起来,得到一个值,返回Optional<T> |
1 | |
收集
| 方法名 | 说明 |
|---|---|
| collect(Collector c) | 将流转换为其他形式,接受一个collector接口的实现。用于给Stream中的元素做汇总的方法 |
另外Collector类给提供了很多静态方法,可供作为collect方法的参数使用
Stream API
http://blog.170827.xyz/2024/03/23/Stream API/