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

发布于 2024-07-14 07:43:25 字数 56 浏览 6 评论 0原文

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

What is the easiest way to iterate over all the key/value pairs of a java.util.Map in Java 5 and higher?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

吻安 2024-07-21 07:43:25

假设 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 一起使用。

Assuming K is your key type and V is your value type:

for (Map.Entry<K,V> entry : map.entrySet()) {
  K key = entry.getKey();
  V value = entry.getValue();
  // do stuff
}

This version works with every Java version that supports generic (i.e. Java 5 and up).

Java 10 simplified that by letting variable types be inferred using var:

for (var entry : map.entrySet()) {
  var key = entry.getKey();
  var value = entry.getValue();
  // do stuff
}

While the previous two options are basically equivalent at the bytecode level, Java 8 also introduced forEach which uses lambdas* and works slightly difference. It invokes the lambda for each entry, which might add some overhead of those calls, if it's not optimized away:

map.forEach((k, v) -> { 
  // do stuff 
});

* technically the BiConsumer can also be implemented using a normal class, but it's intended for and mostly used with lambdas.

故人爱我别走 2024-07-21 07:43:25

虽然 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
});

While Joachim Sauer is correct for Java 5, there is a simpler option available starting at Java 10:

for (var entry : map.entrySet()) {
    // Do something with entry.getKey() and entry.getValue();
}

and Java 8 introduced:

map.forEach((k, v) -> {
    // Do something with k, v
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文