如何通过流将HashMap <String,Long>更改为LinkedHashMap <String,Long>

时间:2019-12-10 11:40:34

标签: java lambda java-8 java-stream

我是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)

1 个答案:

答案 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::getKeyMap.Entry::getValue都是错误的,因为方法引用实现了Function接口,所以不应将它们转换为String或{ {1}},如果您希望代码通过编译。