在 Java 5 及更高版本中迭代 java.util.Map 的所有键/值对的最简单方法是什么?
假设
K
是您的键类型,V
是您的值类型:
for (Map.Entry<K,V> entry : map.entrySet()) {
K key = entry.getKey();
V value = entry.getValue();
// do stuff
}
此版本适用于支持通用的每个 Java 版本(即 Java 5 及更高版本)。
Java 10 通过使用
var
: 推断变量类型来简化这一点
for (var entry : map.entrySet()) {
var key = entry.getKey();
var value = entry.getValue();
// do stuff
}
虽然前两个选项在字节码级别基本相同,但 Java 8 还引入了
forEach
,它使用 lambdas* 并且工作方式略有不同。它为每个条目调用 lambda,如果没有优化的话,这可能会增加这些调用的一些开销:
map.forEach((k, v) -> {
// do stuff
});
* 从技术上讲,BiConsumer
Joachim Sauer 对于 Java 5 是正确的,但从 Java 10 开始有一个更简单的选项:
for (var entry : map.entrySet()) {
// Do something with entry.getKey() and entry.getValue();
}
以及 Java 8 介绍:
map.forEach((k, v) -> {
// Do something with k, v
});