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));
}
我理解这是行不通的,因为它返回的是一个地图,不断言任何顺序,而不是一个TreeMap。但收藏者似乎没有一个toTreeMap,我不能铸造它--而且我不知道还能做什么。
或者这样不行,我必须用另一种方法来解决这个问题?
您可以利用LinkedHashMap
将保留插入顺序这一事实--因此在Tomap
调用中指定一个供应商,以便它适当地创建LinkedHashMap
:
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(x, y) -> { throw new IllegalStateException("Unexpected merge request"); },
LinkedHashMap::new));
这不会是treemap
,但是您的方法没有声明它返回treemap
,只是一个map
。如果您真的非常非常需要treemap
,我建议您更改签名--但这会很奇怪,因为treemap
是按键而不是按值排序的。
完整示例:
import java.util.*;
import java.util.stream.*;
public class Test {
public static void main(String[] args) throws Exception {
Map<String, Double> unordered = new HashMap<>();
unordered.put("a", 10.5);
unordered.put("b", 5.3);
unordered.put("c", 12.7);
unordered.put("d", 6.0);
Map<String, Double> ordered = orderByDescValue(unordered);
for (Map.Entry<String, Double> entry : ordered.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
private static Map<String, Double> orderByDescValue(Map<String, Double> unorderedMap) {
return unorderedMap.entrySet().stream()
.sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(x, y) -> { throw new IllegalStateException("Unexpected merge request"); },
LinkedHashMap::new));
}
}
c: 12.7
a: 10.5
d: 6.0
b: 5.3
private static <K, V extends Comparable<V>> Map<K, V> orderByDescValue(Map<K, V> unorderedMap) {
return unorderedMap.entrySet().stream()
.sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(x, y) -> { throw new IllegalStateException("Unexpected merge request"); },
LinkedHashMap::new));
}
问题内容: 我正在使用map接口从文件中读取,然后将其中的值存储为键值对。文件格式如下 我将从该文件中读取数据并将其存储为键值对,然后将其显示给用户。我的要求是以这种格式显示结果 因此,我需要按值的降序对地图进行排序。这样我就可以将它们显示为我的结果..我已经阅读了有关此内容并找到了以下代码 我希望这将按升序对值进行排序,我只想知道此方法是否正确,或者其他有效方法对我有帮助? 问题答案: 由于您可
我有一个HashMap与作为关键和一个值作为价值。 我的目标是通过降序值对Hashmap进行排序。应在
问题内容: 如何在如下所示的SQLAlchemy查询中使用ORDER BY ? 此查询有效,但以升序返回: 如果我尝试: 然后我得到:。 问题答案: 来自@ jpmc26的用法
问题内容: 如何按降序对列表进行排序? 问题答案: 在一行中,使用: 将函数传递给:
问题内容: 我正在尝试编写一个函数,该函数将测试列表是否按降序排列。到目前为止,这是我所拥有的,但似乎不适用于所有列表。 我使用了列表,它返回了。 我似乎无法弄清楚我的错误在哪里。 问题答案: 您宁可进行反向检查(一旦获得,则返回false
问题内容: 我想编写一个比较器,使我可以按值而不是默认自然顺序对TreeMap进行排序。 我尝试过类似的方法,但无法找出问题所在: 我想我要问的是:我可以Map.Entry通过比较器吗? 问题答案: 你不能对值本身进行排序,因为这违反了规范: 一个Map是还提供了一个总体排序它的键。 但是,使用外部集合,你始终可以根据需要按键,值或什至两者的组合(!!)进行排序。 这是一个通用方法,如果的值为,则