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