在 Java 5 及更高版本中迭代 java.util.Map 的所有键/值对的最简单方法是什么?

问题描述 投票:0回答:2

在 Java 5 及更高版本中迭代 java.util.Map 的所有键/值对的最简单方法是什么?

java collections foreach java-5
2个回答
89
投票

假设

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

也可以使用普通类来实现,但它是为 lambda 设计的,并且主要与 lambda 一起使用。
    


1
投票
虽然

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 });
    
© www.soinside.com 2019 - 2024. All rights reserved.