1271. Какие отличия между методами map и flatMap?
В Java методы map() и flatMap() используются в контексте Stream API для обработки коллекций. Основное различие между двумя методами заключается в следующем:
- map(): этот метод применяет данную функцию к каждому элементу в потоке и возвращает новый поток, состоящий из результатов.
- flatMap(): этот метод похож на map(), но применяет функцию, которая возвращает поток для каждого элемента в исходном потоке. Затем результаты объединяются в единый поток.
Другими словами, map() преобразует каждый элемент потока в другой элемент, а flatMap() преобразует каждый элемент в поток элементов, а затем объединяет все потоки в один поток.
Вот пример использования map() для преобразования списка строк в список их длин:
List<String> strings = Arrays.asList("foo", "bar", "baz");
List<Integer> lengths = strings.stream().map(String::length).collect(Collectors.toList());
А вот пример использования flatMap() для извлечения отдельных слов из списка предложений:
List<String> sentences = Arrays.asList("hello world", "foo bar", "baz qux");
List<String> words = sentences.stream().flatMap(s -> Stream.of(s.split(" "))).distinct().collect(Collectors.toList());
В этом примере flatMap() используется для разделения каждого предложения на поток слов, которые затем объединяются в один поток. Метод distinct() используется для удаления дубликатов из результирующего потока.