请列举并解释你实际开发中使用过的 Java Stream API 数据处理操作,说明每个操作的功能和使用场景。
考察说明
考查候选人对 Java Stream 常用操作的理解和实际应用能力
回答思路
- 【回答框架 1】Stream 分为创建操作、中间操作和终止操作。中间操作返回新 Stream,惰性求值;终止操作触发流水线执行并产生结果。
- 【回答框架 2】常用中间操作包括 filter 筛选、map 转换、flatMap 展平、distinct 去重、sorted 排序、limit 截断、skip 跳过、peek 调试。每个操作都有明确的输入输出类型。
- 【回答框架 3】常用终止操作包括 forEach 遍历、collect 收集(如 toList、toMap、groupingBy)、reduce 归约(求和、求最大值)、count 计数、anyMatch/allMatch/noneMatch 短路匹配、findFirst/findAny 查找。
- 【回答框架 4】选择操作时根据数据流处理需求,如需要转换用 map,需要过滤条件用 filter,需要聚合用 reduce 或 collect,注意操作顺序和性能影响。
- 【回答框架 5】实际项目中我常用 filter 和 map 进行数据清洗和字段抽取,用 collect 的 groupingBy 进行分组统计,用 reduce 计算总和,注意避免在流中执行耗时操作和无限流问题。
- 【关键点 1】filter 用于条件筛选,map 用于元素转换,flatMap 用于展平嵌套结构
- 【关键点 2】collect 可收集到 List、Map 等功能强大,groupingBy 实现分组
- 【关键点 3】reduce 用于归约聚合,match 系列操作具有短路特性
- 【关键点 4】流操作为惰性求值,终止操作触发执行
- 【关键点 5】注意流不能复用,需重新创建
- 【易错点 1】在并行流中共享可变状态可能导致线程安全问题
- 【易错点 2】使用无限流时需配合 limit 避免 OOM
- 【易错点 3】对流进行多次终止操作会抛出 IllegalStateException