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 复制代码
集合
 ↓
过滤
 ↓
转换
 ↓
重新组成集合
相关推荐
隔窗听雨眠几秒前
CI/CD测试数据清理完全指南:从污染根因到三层清理覆盖的完整方案
java·数据库·ci/cd
北风toto4 分钟前
软件设计师(中级)做题笔记
笔记
Query*5 分钟前
Agent 开发之项目 AI 能力自我进化:通过浏览器自动化与数据采集实现持续学习
java·人工智能·ai·自动化
从零开始的嵌入式之旅8 分钟前
day32
linux·c语言·经验分享·笔记·嵌入式硬件
晓晓_za89866816 分钟前
GEO 搜索源码白帽合规改造:适配各大 AI 信源收录规则
java·开发语言·人工智能·性能优化·开源
Haooog17 分钟前
从 Tool Calling 到 State 并发控制:一个 Agent 如何安全地连续执行任务
java·agent·后端开发
君顾133 分钟前
从0到1课后辅导管理系统开发实战:需求文档、架构设计全复盘
java·开发语言
NeoGressAI外贸数字化39 分钟前
外贸建站:新手怎么自建独立站完整指南
java·人工智能
前端 贾公子41 分钟前
第09章:上下文与记忆 (4)
java·服务器·前端
wjjzhbb1 小时前
中小团队敏捷转型:Scrum还是看板?
java·maven·scrum