Java Разработка | Spring Boot Backend & Architecture. Программирование на Джава для Developer. IT Собеседования, Алгоритмы и Coding задачи. Уроки и курсы для роста в Tech.
@bookjava
Фото map() vs flatMap(): Битва трансформеров Оба метода находятся в конвейере (Intermediate operations) и нужны для преобразования данных. Но работают они с разной геометрией. 1️⃣ map() - Один к одному (1:1) Самый простой случай. Вы берете элемент, делаете с ним что-то и возвращаете один измененный элемент. Структура потока не меняется. Логика: 🔹 Пример: Есть список сотрудников (Employee), нужно получить список их имен (String). 🔹 Аналогия: У вас есть коробка с яблоками. Вы берете каждое яблоко, чистите его и кладете обратно. В итоге у вас столько же объектов, просто они изменились. stream.map(employee -> employee.getName()) // Был Employee, стал String 2️⃣ flatMap() - Один ко многим (1:N) + Сплющивание Этот метод нужен, когда элементы стрима - это контейнеры (списки, массивы), и вам нужно достать содержимое наружу, "сплющив" всё в один поток. Логика: 🔹 Пример: Есть список отделов (Department), в каждом отделе - список сотрудников (List<Employee>). Вы хотите получить один общий список всех сотрудников компании. 🔹 Аналогия: У вас есть коробка, внутри которой лежат маленькие коробочки с конфетами. 🔹 Если сделать map, у вас будет поток коробочек. 🔹 Если сделать flatMap, вы высыпаете конфеты из всех коробочек в одну большую кучу. 💻 Код: Почувствуйте разницу Допустим, у нас есть "Списков списков": List<List<String>> nestedList = List.of(List.of("A", "B"), List.of("C", "D")); ❌ Попытка с map: // Мы получим Stream из Списков: Stream<List<String>> nestedList.stream() .map(list -> list.stream()) .toList(); // Результат: [[A, B], [C, D]] — Матрёшка осталась! ✅ Решение с flatMap: // Мы получим единый Stream строк: Stream<String> nestedList.stream() .flatMap(list -> list.stream()) // Превращаем каждый список в стрим и сливаем .toList(); // Результат: [A, B, C, D] — То, что нужно! ⚡ Когда что использовать? 1. map: Используем в 90% случаев. Когда нужно просто превратить А в Б (Число в Строку, Объект в Поле объекта). 2. flatMap: Используем, когда нужно убрать вложенность. 🔹 List<List<T>> List<T> 🔹 Работа с файлами (список строк из списка файлов). 🔹 Работа с Order List<LineItem>. 🔥 Итог 🔹 map преобразует элементы. 🔹 flatMap преобразует и разворачивает структуру. #Java #StreamAPI #MapVsFlatMap #InterviewQuestions 👉 @BookJava
Если у вас установлено приложение,
вы можете сразу перейти в канал