我有一个TreeMap,看起来像这样:
{AMZ=12.733334, APL=10.133334, FBK=21.4, GGL=30.599998, GHB=4.6, MCS=11.433334}
**我想只保留包含3个最高值的条目。**我试着这样做:
TreeMap<String, Float> ThreeBestStocksMean = new TreeMap<>();
ThreeBestStocksMean = stocksMean.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
.limit(3)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (key1, key2) -> key1, TreeMap::new));
System.out.println(ThreeBestStocksMean.toString());
我得到这个:
{APL=10.133334, GHB=4.6, MCS=11.433334}
正如你所看到的,它与我想要的完全相反。它给了我3个最低的值,虽然我想要3个最高的。
我是否错误地使用了Comparator.reverseOrder()
?事实上,它产生的结果与它不存在时完全相同。我也尝试使用Map.Entry.<String, Float>comparingByValue().reversed()
获得相同的结果。
编辑:
上面的代码可以工作,我上面的代码中有一些剩余部分使它无法工作。
1条答案
按热度按时间owfi6suc1#
你能试着编译代码吗?我试着复制代码如下,我得到了预期的输出- {AMZ=12.733334,FBK=21.4,GGL=30.599998}