Как взять дочерний элемент дочернего значения и собрать как карту с помощью оператора Java Stream - PullRequest
3 голосов
/ 23 декабря 2019

У меня есть класс ниже.

Class Person {
    String value1;
    List<KeyValue> keyValue;
}
Class KeyValue{
    String key;
    String value;
}

Мне нужна выходная карта как Map<String, String>, где первое строковое значение - Ключ - keyValue.getValue () , который всегда будет уникальным, а второе строковое значение - значениеvalue1 .

Я могу просто выполнить итерацию и выполнить производительность, но есть ли способ сделать это с помощью оператора Stream и сделать код читаемым в формате.

1 Ответ

3 голосов
/ 23 декабря 2019

Для каждого KeyValue для данного Person создайте запись карты. Затем используйте оператор flatMap, чтобы объединить все эти потоки в один большой поток. Наконец, соберите его в карту, используя toMap коллектор. Учитывая, что значение, возвращаемое KeyValue.getValue, всегда уникально (в соответствии с вашей формулировкой проблемы), конфликты клавиш могут не возникатьВот как это выглядит.

Map<String, String> keyToPersonMap = people.stream()
    .flatMap(p -> p.getKeyValue().stream()
            .map(kv -> new AbstractMap.SimpleEntry<>(kv.getValue(), p.getValue1())))
    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...