Преобразовать список Map.Entry в LinkedHashMap - PullRequest
0 голосов
/ 05 июля 2018

У меня есть список, и мне нужно преобразовать его в карту, но с тем же порядком ключей, поэтому мне нужно преобразовать в LinkedHashMap. Мне нужно что-то подобное:

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

но с конкретным типом карты, например:

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

Возможно ли объединить оба варианта выше?

1 Ответ

0 голосов
/ 05 июля 2018

Да, просто используйте вариант 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));
...