Встречается на собеседованиях • сегодня
В чем разница между операциями map и flatMap в Stream API
Разница между map и flatMap в Stream API
Устный ответ
Если коротко
mapделает преобразование один к одному: на каждый входной элемент — ровно один выходной.flatMapсначала превращает элемент в набор или поток, затем «расплющивает» их в один общий поток — то есть на один вход может дать от нуля до нескольких выходов.
Чуть подробнее
- Применяю
map, когда каждому элементу нужна одна новая форма, например строку в длину. flatMapберу, когда из элемента получается коллекция или поток и их нужно слить в один поток. Например: список предложений разбиваем на слова: «берём поток строк → для каждой строки получаем поток слов → расплющиваем → собираем».- Важно:
flatMapможет вернуть пустой поток и тем самым «выбросить» элемент; порядок исходного потока сохраняется по контракту.
Идеально
- По производительности
mapдешевле: одна функция — один элемент, меньше аллокаций. flatMapчасто создаёт множество временных коллекций или потоков; на больших объёмах это бьёт по GC.- С Java шестнадцать есть
mapMulti— даёт те же эффекты, чтоflatMap, но без создания промежуточных потоков, удобно для высокой производительности. - Для примитивов лучше
flatMapToIntи похожие, чтобы избегать автобоксинга. - Краевые случаи: функция в
flatMapне должна возвращать null-поток — будет исключение; при работе с ресурсами внутриflatMap(например, строки файла) важно корректно закрывать их. - Альтернативы:
Collectors.flatMappingв комбинированных коллекторах иmapMultiдля «расплющивания» в один проход; в параллельных потокахflatMapможет давать неровную нагрузку — иногда лучше предварительно собрать и затем обрабатывать пакетами.
Тезисно
Если коротко
map: преобразование 1→1 (на каждый входной элемент — ровно один выходной).flatMap: преобразование 1→0..n (элемент превращается в набор/поток и «расплющивается» в общий поток).
Чуть подробнее
map— когда каждому элементу нужна одна новая форма.flatMap— когда из элемента получается коллекция или поток и их нужно слить в один общий поток.flatMapможет вернуть пустой поток и «выбросить» элемент.
Идеально
mapдешевле по производительности: одна функция — один элемент, меньше аллокаций.flatMapдороже: часто создаёт временные коллекции/потоки, что бьёт по GC.- Начиная с Java 16,
mapMultiдаёт эффектыflatMap, но без создания промежуточных потоков. - В
flatMapфункция не должна возвращать null-поток — будет исключение. - В параллельных потоках
flatMapможет давать неровную нагрузку.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы