【问题标题】:Map: How to get all keys associated with a value?Map:如何获取与值关联的所有键?
【发布时间】:2019-01-24 11:58:54
【问题描述】:

给定一个 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 collections


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多