В Java 8 был введен новый пакет java.util.stream, который предоставляет функциональности для обработки последовательностей элементов. В частности, в нем содержатся методы map() и flatMap(). Хотя оба эти метода используются для преобразования элементов, между ними есть определенные различия.
Разработка на Java — востребованное направление, такие специалисты будут нужны на рынке еще долго. На курсе «Java-разработчик» от Skypro освоить профессию можно с нуля за 11 месяцев, даже если вы гуманитарий и ничего не знаете об IT. Программа составлена от простого к сложному и адаптирована для новичков. Преподаватели — практикующие специалисты из крупных компаний: «Сбер», «Самокат» и других.
Метод map()
Метод map() используется для преобразования каждого элемента потока с помощью заданной функции. На вход он принимает функцию, которая применяется к каждому элементу, а на выходе получается новый поток, содержащий преобразованные элементы.
Предположим, есть список целых чисел, и требуется увеличить каждое число в списке на единицу. Это можно сделать с помощью метода map() следующим образом:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> increasedNumbers = numbers.stream()
.map(n -> n + 1)
.collect(Collectors.toList());
В данном примере функция n -> n + 1 применяется к каждому элементу списка, и результат собирается в новый список.
Метод flatMap()
В то время как метод map() преобразует каждый элемент потока независимо, метод flatMap() может преобразовывать один элемент в несколько. Метод flatMap() «уплощает» структуру данных, превращая поток потоков в один объединенный поток.
Например, если есть список списков чисел, и требуется объединить все числа в один список, это можно сделать с помощью flatMap():
List<List<Integer>> listOfLists = Arrays.asList(
Arrays.asList(1, 2, 3),
Arrays.asList(4, 5, 6),
Arrays.asList(7, 8, 9)
);
List<Integer> flatList = listOfLists.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
В этом примере метод flatMap() преобразует каждый список чисел в поток чисел, а затем объединяет все эти потоки в один.
Освойте Java на курсе онлайн-университета Skypro. Учебе нужно будет уделять всего 10 часов в неделю: сможете совмещать с работой и личными делами. Вас ждут 440 часов теории и практики, мастер-классы с реальными рабочими задачами, опытные преподаватели, кураторы и наставники. За время обучения сделаете два полноценных проекта для портфолио и множество домашних заданий, чтобы отработать навыки.
Заключение
Таким образом, основное различие между map() и flatMap() состоит в том, что map() преобразует каждый элемент потока независимо, а flatMap() может преобразовывать один элемент в несколько и уплощать структуру данных. Выбор между этими методами зависит от конкретной задачи.
Перейти в телеграм, чтобы получить результаты теста



Забрать
Добавить комментарий