我是 Java 新手,现在我尝试 lambda/stream。
如何对 Map
进行排序按值(value)?
我尝试了以下方法,但不正确:
time = time.entrySet().stream()
.sorted(Comparator.comparing(Map.Entry::getValue))
.collect(Collectors.toMap((String)Map.Entry::getKey,
(Long)Map.Entry::getValue, LinkedHashMap::new));
我找到了以下方法,但不知道如何使用:
Collector<T, ?, M> toMap(Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends U> valueMapper,
BinaryOperator<U> mergeFunction,
Supplier<M> mapSupplier)
最佳答案
您忘记指定合并函数。
time = time.entrySet()
.stream()
.sorted(Comparator.comparing(Map.Entry::getValue))
.collect(Collectors.toMap(Map.Entry::getKey,
Map.Entry::getValue,
(v1,v2)->v1,
LinkedHashMap::new));
顺便说一句,假设 time
不是原始 Map
,您不必将键强制转换为 String
并将值强制转换为长
。尝试强制转换方法引用 Map.Entry::getKey
和 Map.Entry::getValue
无论如何都是错误的,因为方法引用实现了 Function
接口(interface),因此如果您希望代码通过编译,则不应将它们转换为 String
或 Long
。
关于java - 如何通过 Stream 将 HashMap<String, Long> 更改为 LinkedHashMap<String, Long>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59266395/