Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何更改HashMap<;长字符串>;到LinkedHashMap<;长字符串>;经溪流_Java_Lambda_Java 8_Java Stream - Fatal编程技术网

Java 如何更改HashMap<;长字符串>;到LinkedHashMap<;长字符串>;经溪流

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

我是Java新手,现在我尝试lambda/stream

如何按值对
映射进行排序

我尝试了以下方法,但不正确:

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函数在这里,它不会影响结果。谢谢)我前面读过,它更容易理解。)