我是Java新手,现在尝试使用lambda / stream。
如何按值对Map
进行排序?
我尝试如下,但这是不正确的:
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)
答案 0 :(得分:1)
您忘记指定合并功能。
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
,而值则强制转换为Long
。而且尝试转换方法引用Map.Entry::getKey
和Map.Entry::getValue
都是错误的,因为方法引用实现了Function
接口,所以不应将它们转换为String
或{ {1}},如果您希望代码通过编译。