我有一个嵌套的HashMap:
HashMap<String, Map<String,Integer>> map = new HashMap<>();
嵌套地图的键可能有多个值:
{Color={Red=4, Blue=6}}
我希望能够返回具有最低值的嵌套映射的键。在这种情况下,如果我从外部地图中提供了密钥Color
,我希望返回Red
。
非常感谢任何帮助。
答案 0 :(得分:2)
Iterator
。代码示例:
public static void main(String[] args) throws Exception {
Map<String, Map<String,Integer>> map = new HashMap() {{
put("Color", new HashMap() {{
put("Red", 4);
put("Orange", 1);
put("Blue", 6);
put("Yellow", 2);
}});
}};
System.out.println(getInnerKeyWithLowestValue(map, "Color"));
}
public static String getInnerKeyWithLowestValue(Map<String, Map<String,Integer>> map, String outerKey) {
Map<String, Integer> innerMap = map.get(outerKey);
// Make sure inner map was retrieved
if (innerMap != null) {
Iterator<Map.Entry<String,Integer>> it = innerMap.entrySet().iterator();
Map.Entry<String, Integer> minimum = it.next();
while (it.hasNext()) {
Map.Entry<String, Integer> next = it.next();
if (next.getValue() < minimum.getValue()) {
minimum = next;
}
}
return minimum.getKey();
}
return ""; // Inner map doesn't exist
}
结果:
Orange
答案 1 :(得分:1)
如果Java 8是您的选择,那么编写一个非常简洁的方法就可以轻松完成:
public static String lowestValueKey(Map<String, Map<String, Integer>> map, String key) {
return map.get(key).entrySet().stream()
.min(Comparator.comparing(Map.Entry::getValue))
.get().getKey();
}
有时在地图中使用地图可能非常繁琐。您可以考虑使用Guava库中的Table<String, String, Integer>
。
答案 2 :(得分:0)
从内部hashmap获取Hashmap,并根据链接enter link description here中显示的值对hashmap进行排序。显然,第一个条目将是你的innerhashmap中的最低值。