java中lambda配合stream api可简洁声明式处理集合操作;foreach适合就地修改可变对象但禁增删元素;filter精准筛选、map转换结构、sorted灵活排序,均返回新流且原集合不变。

Java 中 Lambda 表达式配合 Stream API,能用简洁、声明式的方式完成集合的遍历、筛选、转换、排序和聚合等操作,替代传统 for 循环和冗长的匿名内部类写法。
用 forEach 遍历并就地修改
适合对集合中每个元素执行副作用操作,比如设置状态、打日志、更新时间戳等。前提是对象本身可变,且不涉及并发写入。
- 语法简单:list.forEach(item -> item.setProcessed(true));
- 不能在 forEach 中增删 list 元素,否则抛 ConcurrentModificationException
- 若 list 来自 Arrays.asList(),底层是固定数组,调用 set() 会报 UnsupportedOperationException —— 应先转为 new ArrayList(original)
用 filter 精准筛选数据
替代传统 for + if 嵌套,逻辑更聚焦,支持链式叠加多个条件。
- 取年龄大于 25 的用户:users.stream().filter(u -> u.getAge() > 25).collect(Collectors.toList());
- 多条件可用 && 或连续调用 filter(),例如:.filter(u -> u.isActive()).filter(u -> u.getScore() >= 80)
- filter 返回新流,原集合不受影响
用 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 内不要改外部变量、不发 HTTP 请求、不操作数据库
用 sorted + collect 实现灵活排序
一行 Lambda 定义排序规则,无需手写 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) -> ...),更轻量
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











