Java Stream API 常用方法笔记

Java Stream API 常用方法笔记

1. stream()

作用

将集合转换成 Stream 流,开启链式处理。

示例

java 复制代码
list.stream()

理解

复制代码
List集合
   |
   ↓
Stream流
   |
   ↓
进行过滤、转换等操作

注意:

  • stream() 不会修改原集合
  • stream() 只是开启流处理

2. map()

作用

转换数据,把一个对象转换成另一个对象。

格式

java 复制代码
.map(e -> 转换后的数据)

示例

java 复制代码
List<Long> ids = list.stream()
        .map(e -> e.getId())
        .collect(Collectors.toList());

原数据:

text 复制代码
User(id=1)
User(id=2)
User(id=3)

转换:

text 复制代码
[1,2,3]

常见用途

  • 获取对象某个字段
  • Entity 转 DTO
  • 对象类型转换

例如:

java 复制代码
.map(UserDTO::new)

表示:

text 复制代码
User对象
    ↓
UserDTO对象

3. filter()

作用

过滤数据,只保留满足条件的数据。

格式

java 复制代码
.filter(条件)

示例

java 复制代码
List<User> users = list.stream()
        .filter(e -> e.getAge() > 18)
        .collect(Collectors.toList());

原数据:

text 复制代码
10岁
20岁
30岁

过滤后:

text 复制代码
20岁
30岁

常见写法

过滤 null:

java 复制代码
.filter(Objects::nonNull)

作用:

删除 null 数据。

例如:

原:

text 复制代码
[
 null,
 User,
 null,
 User
]

结果:

text 复制代码
[
 User,
 User
]

4. collect()

作用

将 Stream 结果转换成集合。

转 List

java 复制代码
.collect(Collectors.toList())

示例:

java 复制代码
List<Long> ids =
        list.stream()
        .map(e -> e.getId())
        .collect(Collectors.toList());

结果:

text 复制代码
Stream
 ↓
List

转 Set

java 复制代码
.collect(Collectors.toSet())

作用:

去重。


转 Map

java 复制代码
.collect(Collectors.toMap())

作用:

转换成 Map。


5. forEach()

作用

遍历执行操作。

示例:

java 复制代码
list.stream()
    .forEach(e -> System.out.println(e));

等价:

java 复制代码
for(Object e:list){
    System.out.println(e);
}

6. sorted()

作用

排序。

默认排序:

java 复制代码
list.stream()
    .sorted();

自定义排序:

java 复制代码
list.stream()
    .sorted((a,b)->a.getAge()-b.getAge());

例如:

排序前:

text 复制代码
30
10
20

排序后:

text 复制代码
10
20
30

7. distinct()

作用

去重。

示例:

java 复制代码
list.stream()
    .distinct();

原:

text 复制代码
1
2
2
3

结果:

text 复制代码
1
2
3

8. limit()

作用

获取前 N 条数据。

示例:

java 复制代码
list.stream()
    .limit(10);

含义:

获取前10条。


9. skip()

作用

跳过前 N 条数据。

示例:

java 复制代码
list.stream()
    .skip(10);

含义:

跳过前10条。


10. findFirst()

作用

获取第一个符合条件的数据。

示例:

java 复制代码
Optional<User> user =
        list.stream()
        .findFirst();

返回:

text 复制代码
Optional<T>

原因:

可能没有数据。


11. anyMatch()

作用

判断是否存在一个满足条件的数据。

示例:

java 复制代码
boolean result =
        list.stream()
        .anyMatch(e -> e.getStatus()==1);

返回:

text 复制代码
true / false

12. allMatch()

作用

判断是否全部满足条件。

示例:

java 复制代码
boolean result =
        list.stream()
        .allMatch(e -> e.getStatus()==1);

含义:

所有数据 status 都等于1。


13. noneMatch()

作用

判断是否没有满足条件的数据。

示例:

java 复制代码
boolean result =
        list.stream()
        .noneMatch(e -> e.getStatus()==1);

含义:

没有任何数据 status=1。


14. count()

作用

统计数量。

示例:

java 复制代码
long count =
        list.stream()
        .count();

结果:

text 复制代码
集合元素数量

15. reduce()

作用

聚合计算。

例如求和:

java 复制代码
int sum =
        list.stream()
        .reduce(0,(a,b)->a+b);

计算:

text 复制代码
1+2+3

结果:

text 复制代码
6

常用组合

1. 获取对象ID列表

代码:

java 复制代码
List<Long> ids =
        list.stream()
        .map(e -> e.getId())
        .collect(Collectors.toList());

流程:

text 复制代码
对象集合
    |
    ↓
获取id
    |
    ↓
List<Long>

例如:

输入:

text 复制代码
[
 User(id=1),
 User(id=2),
 User(id=3)
]

输出:

text 复制代码
[1,2,3]

2. 过滤数据

代码:

java 复制代码
List<User> users =
        list.stream()
        .filter(e -> e.getStatus()==1)
        .collect(Collectors.toList());

流程:

text 复制代码
集合
 ↓
过滤
 ↓
返回新集合

3. 过滤 + 转换

代码:

java 复制代码
List<Long> ids =
        list.stream()
        .filter(Objects::nonNull)
        .map(e -> e.getId())
        .collect(Collectors.toList());

流程:

text 复制代码
集合
 ↓
过滤null
 ↓
获取id
 ↓
生成List

项目中常见写法

获取数据库ID

java 复制代码
List<Long> ids =
        collect.stream()
        .map(e -> e.getId())
        .collect(Collectors.toList());

含义:

text 复制代码
历史数据集合
        |
        ↓
获取每条数据id
        |
        ↓
组成id集合

例如:

输入:

text 复制代码
[
 History(id=100),
 History(id=200),
 History(id=300)
]

输出:

text 复制代码
[100,200,300]

Stream 方法分类

中间操作(返回 Stream)

方法 作用
map 转换
filter 过滤
sorted 排序
distinct 去重
limit 限制数量
skip 跳过数据

终止操作(产生结果)

方法 作用
collect 转换集合
forEach 遍历
findFirst 查找第一个
count 统计
reduce 计算
anyMatch 是否存在
allMatch 是否全部
noneMatch 是否没有

记忆口诀

复制代码
stream  开始处理

filter  筛选数据

map     转换数据

sorted  排序

collect 收集结果

forEach 遍历执行

项目中最常见:

java 复制代码
list.stream()
    .filter()
    .map()
    .collect();

理解:

text 复制代码
集合
 ↓
过滤
 ↓
转换
 ↓
重新组成集合
相关推荐
代码什么用8 小时前
Spring基础使用
java·后端·spring
Su米苏9 小时前
Spring AI 中MCP 与普通 @Tool的区别
java·人工智能·spring
码云数智-园园9 小时前
unique_ptr 还是 shared_ptr?C++ 智能指针选型与内存泄漏实战分析
java·开发语言
老板一杯拿铁9 小时前
Java 异常体系详解:从字节码原理到最佳实践
java
蜗牛互联网9 小时前
Java 17 HttpClient调用文件转写API的超时与失败回退
java·人工智能·后端
qq_2842740510 小时前
机械原理笔记:平面机构自由度计算(复合铰链、局部自由度、虚约束)与四杆机构入门(含考点)
笔记·学习·平面·自动化·制造
禾小西10 小时前
07丨Redis 哨兵机制:主库故障后,如何恢复服务?
java·开发语言·redis
我不是阵雨10 小时前
JDK 21虚拟线程Pinning陷阱:一文拔钉解困
java·开发语言
小卡车55510 小时前
java反射、自定义注解的应用(自定义分页)
java
qq_2842740511 小时前
数控铣床与加工中心笔记:铣刀与刀柄系统、G54试切对刀、镜像加工指令、孔加工工艺(钻扩铰镗)与固定循环G73/G83/G81/G76/G87/G84
笔记·学习·自动化·制造