Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг
10 Июл 2023
3 мин
2586

Различия между методами map() и flatMap() в Java 8

В Java 8 был введен новый пакет java.util.stream, который предоставляет функциональности для обработки последовательностей элементов. В частности, в нем содержатся

В 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() может преобразовывать один элемент в несколько и уплощать структуру данных. Выбор между этими методами зависит от конкретной задачи.

Тест на профориентацию
За 10 минут узнайте, как ваш опыт пригодиться в IT индустрии
Подробнее
Тест на профориентацию

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