从内部hashmap返回具有最低值的键

时间:2015-08-02 14:04:49

标签: java

我有一个嵌套的HashMap:

HashMap<String, Map<String,Integer>> map = new HashMap<>();

嵌套地图的键可能有多个值:

{Color={Red=4, Blue=6}}

我希望能够返回具有最低值的嵌套映射的键。在这种情况下,如果我从外部地图中提供了密钥Color,我希望返回Red

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

  1. 按键获取内部地图。
  2. 获取内部地图的Iterator
  3. 将第一个kvp指定为最小值。
  4. 循环遍历迭代器,检查后续kvp是否小于最小值,如果为真,则指定它。
  5. 返回最小的密钥。
  6. 代码示例:

    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中的最低值。