Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

Stream.flatMap()

Превращает каждый элемент в поток и склеивает все потоки в один.

Доступно с: Java 8

Синтаксис

<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper)

Параметры

ПараметрТипОписание
mapperFunction<? super T, ? extends Stream<? extends R>>Функция, которая превращает элемент в поток.

Возвращаемое значение

Stream<R>Один общий поток из всех полученных потоков.

Примеры

Список списков в один список:

void main() {
    List<List<Integer>> nested = List.of(List.of(1, 2), List.of(3), List.of(4, 5));
    List<Integer> flat = nested.stream().flatMap(List::stream).toList();
    IO.println(flat);
}

Результат:

[1, 2, 3, 4, 5]

Все уникальные слова из строк:

void main() {
    List<String> lines = List.of("to be", "or not", "to be");
    List<String> words = lines.stream()
        .flatMap(line -> Arrays.stream(line.split(" ")))
        .distinct()
        .toList();
    IO.println(words);
}

Результат:

[to, be, or, not]

Примечания

map() дал бы поток коллекций (Stream<List<Integer>>), а flatMap() раскрывает их в поток элементов. Функция должна возвращать именно Stream, поэтому для списков пишут List::stream, для массивов — Arrays::stream.

См. также

  • Stream.map() — Преобразует каждый элемент потока.
  • Collection.stream() — Создаёт поток (Stream) из элементов коллекции.
  • Stream.distinct() — Убирает повторяющиеся элементы потока.

Вопросы и ответы по теме

В учебнике

  • Операции над потоками — Основные операции Stream API — filter, map, sorted, distinct, limit, skip, count, reduce, anyMatch, findFirst и числовые потоки.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.