java - Java - 从 HashMap 单键多值中获取键(反向映射)
问题描述
我有一个用这样的东西定义的 HashMap:
Map<Foo, List<Bar>> = new HashMap();
我正在尝试使用 对 Hashmap 进行反向搜索Bar
以获取Foo
.
我想做这样的事情:
if(ArrayListBar.contains(bar)) {
return Foo;
} else {
return null;
}
这在 HashMap 中是否可以实现,或者有没有更好的方法来处理这个问题而不使用 HashMap?
解决方案
您可以使用 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
更新:当没有找到地图元素时添加了缺失的语句。