Сбор на карте с использованием Collector.toMap - PullRequest
0 голосов
/ 18 марта 2019

Я не могу разобраться с простой проблемой.У меня есть карта типа X, и она должна быть преобразована в карту типа Y

mapOfTypeX.entrySet().stream().map(e-> transform(e)).collect(Collector.toMap(....));

Функция преобразования принимает набор записей и возвращает карту типа Y, например, Map<key,SomeClassObjectAsValue>

public Map<key,SomeClassObjectAsValue> transform(Map.Entry<String,Person> entry){}

Я не уверен, что передать функции Collector.ToMap.Существующий код является императивным кодом и передает карту типа Y в функцию преобразования и делает map.putall

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Вы можете использовать flatMap потоков и объединить все записи со всех карт, полученных методом преобразования, как:

Map<key,SomeClassObjectAsValue> newMap = 
    mapOfTypeX.entrySet()
        .stream()
        .flatMap(e -> transform(e).entrySet().stream())
        .collect(Collectors
            .toMap(Map.Entry::getKey, Map.Entry::getValue,(oldValue, newValue) -> oldValue));
1 голос
/ 18 марта 2019

По сути, вам нужно использовать функцию collect вместо использования toMap wrapper.

mapOfTypeX.entrySet().stream()
          .map(e-> transform(e))
          .collect(HashMap::new, HashMap::putAll, HashMap::putAll);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...