java中lambda配合stream api将集合操作简化为一行链式调用,聚焦业务意图:filter筛选、map转换、sorted排序、foreach安全更新状态,均不修改原集合且需保持纯函数特性。

Java 中 Lambda 表达式配合 Stream API,能把集合操作从多行循环逻辑压缩成清晰、可读的一行链式调用,核心是把“做什么”和“怎么做”分开,聚焦业务意图。
用 filter 快速筛选符合条件的数据
替代传统 for + if 嵌套,语义直接,不修改原集合。
- 取年龄大于 25 的用户:users.stream().filter(u -> u.getAge() > 25).collect(Collectors.toList())
- 多个条件可链式叠加,比如先筛活跃用户再筛 VIP:.filter(User::isActive).filter(User::isVip)
- 避免在 filter 内部做 I/O 或状态修改,保持纯函数特性
用 map 统一转换或提取字段
适用于生成新结构、脱敏、格式化等场景,原始数据保持不变。
- 提取所有用户名:users.stream().map(User::getName).collect(Collectors.toList())
- 构造简化 DTO(如打折订单):orders.stream().map(o -> new OrderDTO(o.getId(), o.getTotal() * 0.9)).collect(Collectors.toList())
- 不要在 map 中修改外部变量、发请求或更新数据库
用 sorted 实现一行定义排序规则
不用手写 Comparator 类,支持单字段、多级、正逆序组合。
- 按注册时间倒序:list.stream().sorted((a, b) -> b.getCreatedAt().compareTo(a.getCreatedAt())).collect(Collectors.toList())
- 多级排序更直观:.sorted(Comparator.comparing(User::getAge).reversed().thenComparing(User::getName))
- 若只是临时排序展示,也可用 Collections.sort(list, (a, b) -> ...),更轻量
用 forEach 安全地就地更新对象状态
适合批量修改可变对象的字段,但有明确限制。
- 设处理状态:list.forEach(item -> item.setStatus("已处理"))
- 确保 list 是可变的 ArrayList;若来自 Arrays.asList(),需先转:new ArrayList(original)
- 禁止在 forEach 中增删元素,否则触发 ConcurrentModificationException
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











