从流Java8创建排序的HashMap

从流Java8创建排序的HashMap,java,java-8,java-stream,Java,Java 8,Java Stream,我正在将HashMap转换为HashMap,其中内容按值排序。当我打印以下内容时: Stream<Map.Entry<String, Double>> sorted = map.entrySet().stream() .sorted(Collections.reverseOrder(Map.Entry.comparingByValue())).forEach(System.out::println); 如何修改流以便发回已排序的HashMap?默认情况下,您使用

我正在将
HashMap
转换为
HashMap
,其中内容按值排序。当我打印以下内容时:

Stream<Map.Entry<String, Double>> sorted = map.entrySet().stream()
    .sorted(Collections.reverseOrder(Map.Entry.comparingByValue())).forEach(System.out::println);

如何修改流以便发回已排序的HashMap?

默认情况下,您使用的收集器生成一个
HashMap
,而
HashMap
没有排序

您可以使用不同的收集器生成
LinkedHashMap
,该收集器保留插入顺序:

return map.entrySet()
    .stream()
    .sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
    .collect(Collectors.toMap(entry -> entry.getKey(), 
                              entry -> entry.getValue(),
                              (a,b)->a,
                              LinkedHashMap::new));

默认情况下,您使用的收集器生成一个
HashMap
,并且
HashMap
没有顺序

您可以使用不同的收集器生成
LinkedHashMap
,该收集器保留插入顺序:

return map.entrySet()
    .stream()
    .sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
    .collect(Collectors.toMap(entry -> entry.getKey(), 
                              entry -> entry.getValue(),
                              (a,b)->a,
                              LinkedHashMap::new));

第一行代码行吗?第一行代码行吗?当然行。我被高阶函数迷住了,以至于忘记了HashMap问题。非常感谢。当然可以。我被高阶函数迷住了,以至于忘记了HashMap问题。非常感谢。