Sobes.tech
Назад к вопросам
Senior
4

Расскажи про Stream API: типы операций, разница между map и flatMap

Компании, где спрашивали
Octo

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

sobes.tech AI

Stream API в Java — это мощный инструмент для работы с коллекциями и последовательностями данных, позволяющий писать декларативный код для обработки данных.

Типы операций:

  • Промежуточные (intermediate) — возвращают новый Stream, позволяют строить цепочку операций, например: filter(), map(), flatMap(), sorted(), distinct().
  • Терминальные (terminal) — завершают цепочку и возвращают результат или побочный эффект, например: collect(), forEach(), reduce(), count().

Разница между map и flatMap:

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

Пример:

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

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

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

// flatMap позволяет работать с вложенными структурами удобнее

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