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发送回去?
您使用的收集器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)