РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
473 of 1163 menu

Метод flatMap

Метод flatMap класса Stream преобразует каждый элемент исходного потока в новый поток с помощью переданной функции и объединяет все эти потоки в один общий поток. В первый параметр мы передаем функцию-маппер, которая принимает элемент потока и возвращает новый поток. В отличие от метода map, который возвращает одно значение для каждого элемента, flatMap возвращает поток значений, которые затем «разворачиваются» в общий поток.

Синтаксис

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

Пример

Давайте преобразуем каждую строку потока в поток ее символов и объединим все в один поток:

import java.util.List; import java.util.stream.Stream; public class Main { public static void main(String[] args) { List<String> list = List.of("abc", "de", "f"); Stream<String> res = list.stream() .flatMap(s -> s.chars().mapToObj(c -> String.valueOf((char) c))); res.forEach(System.out::println); } }

Результат выполнения кода:

"a" "b" "c" "d" "e" "f"

Пример

Давайте развернем вложенные списки в один плоский список чисел:

import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<List<Integer>> list = List.of( List.of(1, 2, 3), List.of(4, 5), List.of(6) ); List<Integer> res = list.stream() .flatMap(inner -> inner.stream()) .collect(Collectors.toList()); System.out.println(res); } }

Результат выполнения кода:

[1, 2, 3, 4, 5, 6]

Пример

Давайте с помощью flatMap разобьем каждую строку потока на слова и соберем их в один список:

import java.util.List; import java.util.Arrays; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<String> list = List.of("abc de", "f ghi", "jkl"); List<String> res = list.stream() .flatMap(s -> Arrays.stream(s.split(" "))) .collect(Collectors.toList()); System.out.println(res); } }

Результат выполнения кода:

["abc", "de", "f", "ghi", "jkl"]

Смотрите также

  • метод map,
    который преобразует каждый элемент потока
  • метод filter,
    который фильтрует элементы потока
  • метод collect,
    который собирает элементы потока в коллекцию
  • класс Stream,
    который представляет поток элементов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить