lambda 配合 stream 或集合方法可简洁实现遍历、筛选、转换、排序等操作,避免 for 循环和手动 comparator;foreach 适合就地更新可变对象,filter/map/sorted 等流操作返回新集合且支持链式调用,注意不可增删元素、避免副作用及并发写入。

直接用 Lambda 配合 Stream 或集合原生方法,就能把遍历、筛选、转换、排序这些操作写成一两行,不用再写 for 循环或手写 Comparator。
用 forEach 快速遍历并修改对象状态
适合就地更新对象字段,比如批量设状态、加时间戳、调用 setter 方法。前提是对象可变,且不涉及并发写入。
- 语法简单:list.forEach(item -> item.setStatus("已处理"));
- 不能在 forEach 里增删元素,否则触发 ConcurrentModificationException
- 若 list 来自 Arrays.asList(),底层是固定数组,调用 set() 会抛 UnsupportedOperationException —— 先 new ArrayList(original) 再操作
用 stream().filter() 精准筛出目标数据
替代传统 for + if 嵌套,逻辑更聚焦,链式调用也方便后续接 map 或 collect。
- 例如取年龄大于 25 的用户:users.stream().filter(u -> u.getAge() > 25).collect(Collectors.toList());
- 多个条件可用 && 或单独链式调用,如 .filter(...).filter(...),语义清晰
- 注意 filter 返回的是新流,原集合不受影响
用 stream().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 实现灵活排序与收集成果
无需自己写 Comparator 实现类,一行 Lambda 就定义排序规则,还能和 filter、map 组合使用。
- 按注册时间倒序: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, comparator) 更省内存;需要新副本才走 stream
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











