РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
544 of 1163 menu

Метод flatMapping

Метод flatMapping класса Collectors применяется в качестве промежуточного коллектора внутри других коллекторов, например groupingBy. Он принимает два параметра: первый - функцию-маппер, которая преобразует каждый элемент потока в новый поток (или другую коллекцию), второй - нижестоящий коллектор, который собирает уже «развёрнутые» элементы. В отличие от метода mapping, который отображает один элемент в один элемент, flatMapping отображает один элемент в несколько, после чего все результаты объединяются в плоскую структуру.

Синтаксис

Collectors.flatMapping(mapper, downstream)

Пример

Давайте сгруппируем строки по первой букве и внутри каждой группы развернём каждую строку в отдельные символы с помощью flatMapping:

import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<String> list = List.of("abcde", "ab", "cd"); Map<Character, List<Character>> res = list.stream() .collect(Collectors.groupingBy( s -> s.charAt(0), Collectors.flatMapping( s -> s.chars().mapToObj(c -> (char) c), Collectors.toList() ) )); System.out.println(res); } }

Результат выполнения кода:

{a=[a, b, c, d, e, a, b], c=[c, d]}

Пример

Давайте развернём каждую строку в поток её символов и соберём все символы в один список без группировки:

import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<String> list = List.of("abcde", "12345"); List<Character> res = list.stream() .collect(Collectors.flatMapping( s -> s.chars().mapToObj(c -> (char) c), Collectors.toList() )); System.out.println(res); } }

Результат выполнения кода:

[a, b, c, d, e, 1, 2, 3, 4, 5]

Пример

Давайте отфильтруем пустые потоки: если строка пустая, её маппер вернёт пустой поток, и такие элементы не попадут в результат:

import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<String> list = List.of("abcde", "", "12345"); List<Character> res = list.stream() .collect(Collectors.flatMapping( s -> s.chars().mapToObj(c -> (char) c), Collectors.toList() )); System.out.println(res); } }

Результат выполнения кода:

[a, b, c, d, e, 1, 2, 3, 4, 5]

Смотрите также

  • метод mapping,
    который преобразует элементы один к одному
  • метод groupingBy,
    который группирует элементы по ключу
  • метод toList,
    который собирает элементы в список
  • класс Collectors,
    который содержит все коллекторы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить