如何获得HashMap中的3个最高值?

sha*_*ixx 5 java sorting hashmap entryset

我有一个哈希图,如下所示:

    HashMap<String, Integer> hm = new HashMap<String, Integer>;
    hm.put("a", 1);
    hm.put("b", 12);
    hm.put("c", 53);
    hm.put("d", 2);
    hm.put("e", 17);
    hm.put("f", 8);
    hm.put("g", 8);
Run Code Online (Sandbox Code Playgroud)

我如何获得具有 3 个最高值的键?所以它会返回:

    "c", "e", "b"
Run Code Online (Sandbox Code Playgroud)

谢谢。

Pat*_*hen 9

我的解决方案,按值排序并获得前 3 名并返回键列表。

List<String> keys = hm.entrySet().stream().sorted(Map.Entry.<String, Integer>comparingByValue().reversed()).limit(3).map(Map.Entry::getKey).collect(Collectors.toList());

Run Code Online (Sandbox Code Playgroud)

希望能帮助到你

  • 这对于相对较小的输入映射(&lt; 10000 个元素)来说效果很好。最好使用某种收集器来跟踪当前的前三名,这样您就不必对整个地图进行排序。 (2认同)