最常用、最简洁的方式是调用 map.foreach() 方法,配合 biconsumer 函数式接口实现键值对的逐个处理。

Java 中用 Lambda 表达式遍历 Map,最常用、最简洁的方式是调用 Map.forEach() 方法,配合 BiConsumer 函数式接口实现键值对的逐个处理。
直接用 forEach 遍历键值对
Map 接口从 Java 8 开始提供了 forEach(BiConsumer super K, ? super V> action) 方法,它接收一个接受两个参数(key 和 value)的 Lambda 表达式:
Map<string integer> map = new HashMap();
map.put("Alice", 25);
map.put("Bob", 30);
map.put("Charlie", 35);
map.forEach((key, value) -> System.out.println(key + " = " + value));
// 输出示例:
// Alice = 25
// Bob = 30
// Charlie = 35
</string>
遍历 keySet 或 values 时用 Lambda
如果只需要遍历键或只处理值,可结合 keySet() / values() 与 stream() 或传统增强 for:
- 遍历所有 key:
map.keySet().forEach(key -> System.out.println(key)); - 遍历所有 value:
map.values().forEach(value -> System.out.println(value)); - 用 Stream 处理(适合过滤、映射等):
map.entrySet().stream().filter(e -> e.getValue() > 28).forEach(e -> System.out.println(e.getKey()));
注意 entrySet() + Lambda 的常见写法
虽然 forEach 最简,但有时仍需显式获取 Map.Entry 对象(比如要调用 e.getKey() 或 e.getValue() 方法):
map.entrySet().forEach(entry -> {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println("Key: " + key + ", Value: " + value);
});
这种写法比 forEach((k,v) -> ...) 略冗余,但更灵活,尤其在需要多次访问 key/value 或做复杂逻辑时。
不能直接用增强 for + Lambda,但可结合 Stream
增强 for 循环(for (Entry<k> e : map.entrySet())</k>)本身不支持 Lambda,但你可以把集合转成 Stream 后再用 Lambda:
map.entrySet().stream().forEach(System.out::println);-
map.entrySet().parallelStream().forEach(e -> process(e));(注意线程安全)
不过除非需要 Stream 的中间操作(如 filter/map/sorted),否则优先选原生 forEach,性能更好、语义更清晰。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











