Sobes.tech
Назад к вопросам
Junior — Middle
66

Каковы отличия между методами map и flatMap при работе со стримами в Java Stream API?

Компании, где спрашивали
СБЕР Бизнес
Prooftech
Surf
EAGAR
Т-БанкТ-Банк
IBS

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

sobes.tech AI

Методы map и flatMap в Java Stream API служат для преобразования элементов стрима, но работают по-разному:

  • map применяет функцию к каждому элементу и возвращает стрим из результатов. Если функция возвращает один элемент, то результат — стрим из этих элементов.

  • flatMap применяет функцию, которая возвращает стрим для каждого элемента, а затем "расплющивает" (флэтит) все эти стримы в один общий стрим.

Пример:

List<String> words = Arrays.asList("hello", "world");

// map: преобразуем каждое слово в массив символов и получаем стрим массивов
Stream<char[]> mapped = words.stream()
    .map(word -> word.toCharArray());

// flatMap: преобразуем каждое слово в стрим символов и объединяем в один стрим символов
Stream<Character> flatMapped = words.stream()
    .flatMap(word -> word.chars().mapToObj(c -> (char)c));

// Вывод flatMap
flatMapped.forEach(System.out::println);

Итого:

  • map — 1 к 1 преобразование элементов.
  • flatMap — 1 к многим, с объединением вложенных стримов в один.