将Map.Entry列表转换为LinkedHashMap

时间:2018-07-05 08:39:49

标签: java stream java-stream

我有一个列表,我需要将其转换为Map,但是键顺序相同,因此需要转换为LinkedHashMap。我需要这样的东西:

list.stream().collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

但具有具体的地图类型,例如:

list.stream().collect(Collectors.toCollection(LinkedHashMap::new))

是否可以将以上两个变体组合在一起?

1 个答案:

答案 0 :(得分:7)

是的,只需使用包含合并功能和地图提供者的Collectors.toMap变体:

<T, K, U, M extends Map<K, U>> Collector<T, ?, M> java.util.stream.Collectors.toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction, Supplier<M> mapSupplier)

使用简单的合并功能(选择第一个值)将如下所示:

LinkedHashMap<KeyType,ValueType> map =
    list.stream().collect(Collectors.toMap(Map.Entry::getKey, 
                                           Map.Entry::getValue,
                                           (v1,v2)->v1,
                                           LinkedHashMap::new));