Map:如何获取与某个值关联的所有键?

发布于 2024-09-28 22:12:03 字数 438 浏览 1 评论 0原文

给定一个 Map,如何查找与特定值关联的所有键?

例如:

Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(1, 5);
map.put(2, 2);
map.put(3, 5);
Collection<Integer> keys = map.values(5); // should return {1, 3}

我正在寻找类似于 Google Collections 的 BiMap 其中值不唯一。

Given a Map, how do I look up all keys associated with a particular value?

For example:

Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(1, 5);
map.put(2, 2);
map.put(3, 5);
Collection<Integer> keys = map.values(5); // should return {1, 3}

I'm looking for something similar to Google Collections' BiMap where values are not unique.

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

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

发布评论

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

评论(1

错爱 2024-10-05 22:12:03

使用普通的 java.util.Map 实现,恐怕您必须迭代映射条目并测试每个值:

for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
  if (entry.getValue().equals(desiredValue) {
    keys.add(entry.getKey());
  }
}

如果您想要更好的性能,您可能需要构建从值到列表的并行映射的钥匙。我不知道有任何现有的集合可以做到这一点,但实施起来应该不难。

从 Java 8 开始,您可以使用 map.forEach:

map.forEach((k,val) -> {
      if (val.equals(desiredValue) {
        keys.add(k);
      }
});

With plain java.util.Map implementations, I am afraid you must iterate through the map entries and test each value:

for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
  if (entry.getValue().equals(desiredValue) {
    keys.add(entry.getKey());
  }
}

If you want better performance, you may want to build up a parallel mapping from values to lists of keys. I don't know of any existing collection doing this, but it should not be difficult to implement.

From Java 8 onwards you can use map.forEach:

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