从Stream Java 8创建排序的HashMap

cad*_*ebe 1 java java-8 java-stream

我将a HashMap<String, Double>转换为HashMap<String, Double>内容按值排序的位置。当我打印出以下内容时:

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

数据以正确的顺序打印出来,按值排序。但是,我不需要打印数据,我想将此流的内容折叠到具有新排序顺序的新HashMap中。我尝试了一些选择,但是当我这样做时,我似乎会找回原始的,未排序的HashMap:

return map.entrySet()
    .stream()
    .sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
    .collect(Collectors.toMap(entry -> entry.getKey(), entry -> entry.getValue()));
Run Code Online (Sandbox Code Playgroud)

如何修改流,以便将已排序的HashMap发送回去?

Era*_*ran 5

您使用的收集器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));
Run Code Online (Sandbox Code Playgroud)