Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
flatMap() в Stream API — что получается на выходе
flatMap() — это операция Stream API, которая преобразует каждый элемент потока в новый поток, а затем объединяет (flatten) все эти потоки в один. На выходе получается один объединённый поток со всеми элементами.
Основная идея
Представьте, что вы имеете список списков. flatMap развернёт их в один большой список:
// Есть список списков чисел
List<List<Integer>> listOfLists = Arrays.asList(
Arrays.asList(1, 2, 3),
Arrays.asList(4, 5),
Arrays.asList(6, 7, 8, 9)
);
// map() просто пройдёт по каждому внутреннему списку (не развернёт их)
listOfLists.stream()
.map(list -> list.stream())
.forEach(System.out::println);
// Результат: три строки (Stream objects), а не числа
// flatMap() развернёт всё в один поток
List<Integer> allNumbers = listOfLists.stream()
.flatMap(list -> list.stream())
.collect(Collectors.toList());
System.out.println(allNumbers); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
Синтаксис и сигнатура
// Сигнатура flatMap
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);
// T — тип элемента текущего потока
// R — тип элементов в новом потоке
// mapper — функция, которая преобразует T в Stream<R>
Визуализация процесса
Исходный поток: [1, 2, 3]
↓ flatMap
Каждый элемент → Stream: [1] → Stream(1, 1, 1)
[2] → Stream(2, 2, 2)
[3] → Stream(3, 3, 3)
↓ flatten
Результат: [1, 1, 1, 2, 2, 2, 3, 3, 3]
Практические примеры
1. Развёртывание вложенных структур
List<String> words = Arrays.asList(
"привет",
"мир",
"java"
);
// Получить все уникальные буквы из всех слов
List<String> uniqueLetters = words.stream()
.flatMap(word -> word.split("") <response clipped><NOTE>response clipped - capped at 8000 chars</NOTE>