java中lambda表达式配合foreach()遍历集合最常用,支持list、set直接调用,hashmap需通过entryset()或专用foreach方法;注意不可修改集合、避免空指针及受检异常。

Java 中 Lambda 表达式在集合遍历中最常用的方式是配合 forEach() 方法,它让代码更简洁、意图更清晰,不需要写冗长的 for 循环或迭代器。
直接用 forEach 遍历 List 和 Set
只要集合实现了 Iterable 接口(比如 ArrayList、HashSet),就能直接调用 forEach,传入一个 Lambda 表达式作为 Consumer 操作:
-
list.forEach(item -> System.out.println(item)):对每个元素执行打印 -
set.forEach(System.out::println):用方法引用进一步简化,效果一样 - 注意:
forEach是终端操作,不返回新集合,只做消费动作
用 Stream + forEach 处理更复杂场景
如果需要先筛选、转换再遍历,推荐走 stream() 流式链路:
-
list.stream().filter(x -> x > 10).forEach(System.out::println):先过滤再打印 - 避免在
forEach里修改外部变量或状态——它不是设计来累积计算的 - 想边看边处理?用
peek()替代forEach,比如.peek(System.out::println).filter(...)
遍历 HashMap 的键值对
HashMap 不直接支持 forEach 元素遍历,但可通过 entrySet() 转成键值对集合后使用:
map.entrySet().forEach(entry -> System.out.println(entry.getKey() + "=" + entry.getValue()))- 也可以用
map.forEach((k, v) -> System.out.println(k + " → " + v)),这是 Map 自带的便捷方法 - 不能在遍历中调用
map.remove()或map.put(),否则抛ConcurrentModificationException
注意事项和常见坑
看似简单,但几个细节容易出错:
- 空指针风险:如果集合里可能含
null,Lambda 中要主动判空,比如item != null && item.length() > 0 - 并行流慎用
forEach:用parallelStream().forEach()不保证顺序,且禁止修改共享变量 - 别在
forEach里抛受检异常(如IOException):Lambda 不支持throws声明,得包装成非受检异常 - 小集合、简单逻辑,传统 for-each 未必更差——不必为用而用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











