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 复制代码
集合
 ↓
过滤
 ↓
转换
 ↓
重新组成集合
相关推荐
心中有你02142 分钟前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
步行cgn35 分钟前
Spring MVC + Thymeleaf 模板解析失败:从 500 错误到页面正常显示
java·spring·mvc
lgcgkCQ1 小时前
【AI 转型实战 1】SpringAI 入门:搭建基础大模型对话能力
java·ai·agent·rag·spring ai·mcp·langchain4j
Wang's Blog1 小时前
Java 项目实战:交友项目 - 用户体系集成总结
java·开发语言·交友
学到老活到老1 小时前
第 24 集:配置文件写了 80,Spring Boot 为什么读到 90?
java·后端·spring
tongyiixiaohuang2 小时前
供应商主数据同步实战:从易快报到金蝶云星空的单一策略落地
java·网络·数据库
鱼宵2 小时前
取集合第一个元素,Java 为什么要写三种写法?
java·windows·python·java21
学长毕设3 小时前
基于SpringBoot的餐厅管理系统-附源码
java·spring boot·后端
刚入门的大一新生3 小时前
Linux-线程互斥
java·开发语言
赵小哥要冲啦3 小时前
社区邻里互助小程序从 0 到 1 复盘:需求拆解与信任机制设计
java·小程序·需求分析