java - map : How to get all keys associated with a value?

标签 java collections

给定一个 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 的内容其中值不是唯一的。

最佳答案

使用简单的 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);
      }
});

关于java - map : How to get all keys associated with a value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4005816/

相关文章:

javascript - 专门化(区分)Backbone.Model 解析方法的行为的干净方法

c# - 无法将 [] 索引应用于 'System.Collections.Specialized.NameValueCollection' 类型的表达式

java - 使用显示器野蛮进餐

java - 检索大量 DTO 最快的 Java 集合是什么?

Java石头/剪刀/布,这样做错了吗?

java - 如何使用 printf 将单独的字符串格式化为一行?

c# - 使用 ResourceReader 创建资源的 HybridDictionary

java - 使用流通过自定义比较器收集到 TreeSet

java - 协议(protocol)获取Java URL

java - 更改 hibernate 托管实体的包名称