在已排序的 HashMap 中选择前“n”个条目

tin*_*uge 2 java sorting hashmap

我已经在此处查看了按值对 HashMap 进行排序但我不太确定如何提取此已排序 HashMap 的前“n”个条目。或者有没有更好的方法来实现这一点?

为了提供一些概述,我正在处理一个 P2P 项目,并且我维护了 peerID 和可以从每个对等点下载文件的相应速率之间的映射。然后我需要选择下载率最高的前“n”个对等点。

Eug*_*ene 5

显然TreeMap,使用自定义比较器将是更好的选择,特别是因为它有一种专门为此量身定制的方法:headMap(Key k)它将为您提供直到这个 key 的所有条目。

另一方面,如果你坚持HashMap你可以使用 java-8:

yourMap.entrySet()
       .stream()
       .sorted(Comparator.comparing(e -> e.getValue(), Comparator.reverseOrder()))
       .limit(n)
       .collect(Collectors.toMap(Entry::getKey, Entry::getValue));
Run Code Online (Sandbox Code Playgroud)