Java 如何更改HashMap<;长字符串>;到LinkedHashMap<;长字符串>;经溪流
我是Java新手,现在我尝试lambda/stream 如何按值对Java 如何更改HashMap<;长字符串>;到LinkedHashMap<;长字符串>;经溪流,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,我是Java新手,现在我尝试lambda/stream 如何按值对映射进行排序 我尝试了以下方法,但不正确: time = time.entrySet().stream() .sorted(Comparator.comparing(Map.Entry::getValue)) .collect(Collectors.toMap((String)Map.Entry::getKey, (Long)Map.Entr
映射进行排序
我尝试了以下方法,但不正确:
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)
Collector toMap(Function您忘记指定合并函数了
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
无论如何都是错误的,因为方法引用实现了函数
>接口,因此如果您希望代码通过编译,则不应将它们转换为字符串
或长
。非常感谢!我看到它工作了。顺便问一下,您能帮助理解-什么(v1,v2)->v1的意思是?这意味着如果v1和v2具有相同的值,映射中的第一个值将是v1,对吗?@Khilarian这意味着如果流将两个值映射到同一个键,它将使用合并函数,该函数将接受这两个值并返回第一个值。由于流源是一个映射,因此没有要合并的值,因此您可以传递任何merge函数在这里,它不会影响结果。谢谢)我前面读过,它更容易理解。)