Из Stream> в List

Как я могу из Stream<List<Integer>> сделать List<Integer>. Т.е я хочу каждый элемент из всех списков находящихся в потоке собрать в одном списке.


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

Автор решения: DaVinChi

С помощью метода reduce удалось сложить все списки потока.

Stream<List<Integer>> strm = ...;
List<Integer> l = strm.reduce((left, right) -> {
   left.addAll(right);
   return left;
}.get();
→ Ссылка
Автор решения: DronDron

Можно сделать так, как предложил автор. Однако есть более используемый способ - flatMap() (как минимум этот метод для этого и сделан)
Вот пример кода:

List<Integer> integers1 = new ArrayList<>(List.of(1, 2, 3));
List<Integer> integers2 = new ArrayList<>(List.of(4, 5, 6));
List<Integer> integers3 = new ArrayList<>(List.of(7, 8, 9));

List<Integer> list = Stream.of(integers1, integers2, integers3)
        .flatMap(Collection::stream)
        .collect(Collectors.toList());

System.out.println(Arrays.toString(list.toArray()));  // [1, 2, 3, 4, 5, 6, 7, 8, 9]
→ Ссылка