Java中使用Stream按值倒序排序Map并保留前3个最高值问题
问题:从TreeMap中筛选值最高的前3个条目
我有一个如下的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());
但得到的结果却和预期完全相反,返回的是3个最低值:
{APL=10.133334, GHB=4.6, MCS=11.433334}
我怀疑是不是错误使用了Comparator.reverseOrder()?实际上不管加不加这个方法,结果都一样,我也尝试过Map.Entry.<String, Float>comparingByValue().reversed(),结果还是相同。
编辑:后续排查发现,这段代码本身是有效的,问题出在我代码中残留的其他无关内容上。
内容的提问来源于stack exchange,提问作者Nicryc
相关产品推荐
相关产品推荐

