地图:如何获取与值相关联的所有键?

时间:2010-10-23 20:03:14

标签: 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类似的内容,其值不是唯一的。

1 个答案:

答案 0 :(得分:12)

使用普通的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);
      }
});