Работа с Map с применением Stream Api

Имеется Map<SomeKey, List<SomeObject>>, необходимо при помощи Stream Api сначала получить все списки из значений, а затем объединить их в один список, чтобы в конце можно было добавить все эти элементы в другую коллекцию.

.forEach(x -> someList.add(x);

Ответы (1 шт):

Автор решения: IR42
List<SomeObject> l = map.values().stream() // Stream<List<SomeObject>>
        .flatMap(Collection::stream) // Stream<SomeObject>
        .collect(Collectors.toList());

flatMap принимает функцию, которая создает Stream c произвольным числом элементов в нём для каждого входного значения, элементы из получившихся стримов в итоге объединяются в один Stream.

В данном случае каждый лист в потоке превращается в поток элементов данного листа, и все элементы всех листов становятся одним потоком, который дальше мы просто собираем в лист.

→ Ссылка