选择顶部' n'已排序的HashMap中的条目

时间:2017-11-23 00:34:27

标签: java sorting hashmap

我已经考虑过按值here对HashMap进行排序,但我不太清楚如何提取顶部' n'这个已排序的HashMap的条目。或者有更好的方法来实现这个目标吗?

为了提供一些概述,我正在开发一个P2P项目,并且我在peerID和相应的速率之间保持映射,从这些速率可以从每个对等端下载文件。然后我需要选择顶部' n'下载率最高的同行。

2 个答案:

答案 0 :(得分:2)

我认为您可能会考虑使用TreeSet类而不是HashMap,因此您可以始终对它们进行排序。访问' n'您可以使用Iterator或subSet()tailSet()方法,具体取决于您的需求。

答案 1 :(得分:2)

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

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

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