Назад к вопросам
Middle
67
questionbank

В чем разница между операциями map и flatMap?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

map преобразует каждый элемент стрима в новый элемент, возвращая стрим с тем же количеством элементов.

flatMap преобразует каждый элемент стрима в стрим элементов, а затем объединяет эти вложенные стримы в один плоский стрим. Используется, когда преобразование одного элемента приводит к нескольким элементам.

Пример:

Предположим, у нас есть список списков строк: List<List<String>> listOfLists.

Использование map:

// Преобразует каждый список строк в его размер
listOfLists.stream()
           .map(list -> list.size())
           .forEach(System.out::println);
// Выведет размеры каждого внутреннего списка: 2, 3, 1 и т.д.

Использование flatMap:

// Преобразует каждый список строк в стрим строк этого списка
// и объединяет (сглаживает) их в один стрим всех строк
listOfLists.stream()
           .flatMap(list -> list.stream())
           .forEach(System.out::println);
// Выведет все строки из всех внутренних списков: "a", "b", "c", "d", "e"...

Сравнительная таблица:

Операция Вход Преобразование Выход Назначение
map Stream<T> T -> R Stream<R> Преобразование каждого элемента
flatMap Stream<T> T -> Stream<R> Stream<R> Преобразование каждого элемента в стрим и объединение