【发布时间】:2015-12-10 13:44:33
【问题描述】:
我想以降序对现有 TreeMap 进行排序(或将 Map 中的值复制到 TreeMap 中,没关系),按值排序(双精度)。
我知道这里发布了很多类似的问题,但是在 Java8 中,您可以在不创建自己的比较器的情况下完成此操作,而是使用 Collections.reverseOrder。
某处有一个答案正是描述了这一点。在此基础上,我尝试实现它:
private Map<String, Double> orderByDescValue(Map<String, Double> unorderedMap) {
Stream<Map.Entry<String,Double>> sorted = unorderedMap.entrySet().stream()
.sorted(Collections.reverseOrder(Map.Entry.comparingByValue()));
return sorted.limit(Configuration.WORDCLOUD_SIZE)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
}
我知道这不起作用,因为它返回一个不断言任何顺序的 Map,而不是 TreeMap。但是 Collectors 似乎没有 toTreeMap,我无法转换它 - 而且我不知道还能做什么。
或者也许它不能以这种方式工作,我必须以另一种方式解决这个问题?
【问题讨论】:
-
TLDR:技术上你不能。但是,还有另一种方法。我会在我的答案中发布它
-
顺便说一句,你可以使用
Entry.comparingByValue().reversed() -
使用接受供应商的
Collectors.toMap的版本。为您的供应商提供一个方法,该方法返回一个新的TreeMap,并将适当的比较器传递给 ctor。
标签: java dictionary java-8 treemap