从流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问题。非常感谢。