У меня есть Stream< Map< K, V > >
и я пытаюсь объединить эти карты вместе, но сохраняют одинаковые значения в списке, так что окончательный вид будет Map< K, List<V> >
. Есть ли способ сделать это? Я знаю, что коллекционер toMap
имеет двоичную функцию, чтобы в основном выбирать, какое значение возвращается, но может ли он отслеживать преобразованный список?Сбор Поток Карта <K,V> к карте <K,List<V>>
т.е.
если a
является Stream< Map< String, Int > >
a.flatMap(map -> map.entrySet().stream()).collect(
Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (val1, val2) -> ??
);
Вы можете используйте ['groupingBy (Function, Collector)'] (https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html#groupingBy-java.util.function.Function- java.util.stream.Collector-) и оставить «HashMap :: new'. Кроме того, для тех, кто предпочитает ссылки на методы, вы можете сделать «a.map (Map :: entrySet) .flatMap (Set :: stream)». – shmosel
Спасибо, я отредактировал свой ответ. – NoDataFound