首页 > 解决方案 > Java - 从 HashMap 单键多值中获取键(反向映射)

问题描述

我有一个用这样的东西定义的 HashMap:

Map<Foo, List<Bar>> = new HashMap();

我正在尝试使用 对 Hashmap 进行反向搜索Bar以获取Foo.

我想做这样的事情:

if(ArrayListBar.contains(bar)) {
    return Foo;
} else {
    return null;
}

这在 HashMap 中是否可以实现,或者有没有更好的方法来处理这个问题而不使用 HashMap?

标签: javadata-structures

解决方案


您可以使用 Map 迭代来做到这一点。

private Foo getKeyByValue(Map<Foo, List<Bar>> map, Bar bar){
    for (Map.Entry<Foo, List<Bar>> entry : map.entrySet()){
        if (entry.getValue().contains(bar)){
            return entry.getKey();
        }
    } 
  return null;
}

您对地图上的每个条目进行迭代,并在数组列表包含输入的 bar 值时返回 Key。

请注意,您的 Bar 类应该实现 equals 方法,以便entry.getValue().contains(bar)可以评估 List 中的栏与方法输入上的栏是不同的对象。

return null更新:当没有找到地图元素时添加了缺失的语句。


推荐阅读