Sobes.tech
Back to questions
Junior — Middle
88

Чем отличаются методы map и flatMap в Java Stream API и в чем их особенности использования?

Companies where asked
IT OneIT One
Т-БанкТ-Банк

Answer from AI

sobes.tech AI

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

  • map принимает функцию, которая преобразует каждый элемент потока в один другой элемент. В результате получается поток с таким же количеством элементов, но другого типа или вида.

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

Пример:

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

// map: преобразуем каждое слово в его длину
List<Integer> lengths = words.stream()
    .map(String::length)
    .collect(Collectors.toList()); // [5, 5]

// flatMap: разбиваем каждое слово на буквы и объединяем все буквы в один поток
List<String> letters = words.stream()
    .flatMap(word -> Arrays.stream(word.split("")))
    .collect(Collectors.toList()); // [h, e, l, l, o, w, o, r, l, d]

Особенности использования:

  • map подходит для простого преобразования элементов один к одному.
  • flatMap нужен, когда из одного элемента нужно получить несколько, и требуется "сплющить" вложенные структуры.