Stream.flatMap()
Превращает каждый элемент в поток и склеивает все потоки в один.
Доступно с: Java 8
Синтаксис
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| mapper | Function<? super T, ? extends Stream<? extends R>> | Функция, которая превращает элемент в поток. |
Возвращаемое значение
Stream<R>Один общий поток из всех полученных потоков.
Примеры
Список списков в один список:
void main() {
List<List<Integer>> nested = List.of(List.of(1, 2), List.of(3), List.of(4, 5));
List<Integer> flat = nested.stream().flatMap(List::stream).toList();
IO.println(flat);
}Результат:
[1, 2, 3, 4, 5]Все уникальные слова из строк:
void main() {
List<String> lines = List.of("to be", "or not", "to be");
List<String> words = lines.stream()
.flatMap(line -> Arrays.stream(line.split(" ")))
.distinct()
.toList();
IO.println(words);
}Результат:
[to, be, or, not]Примечания
map() дал бы поток коллекций (Stream<List<Integer>>), а flatMap() раскрывает их в поток элементов. Функция должна возвращать именно Stream, поэтому для списков пишут List::stream, для массивов — Arrays::stream.
См. также
- Stream.map() — Преобразует каждый элемент потока.
- Collection.stream() — Создаёт поток (Stream) из элементов коллекции.
- Stream.distinct() — Убирает повторяющиеся элементы потока.
Вопросы и ответы по теме
В учебнике
- Операции над потоками — Основные операции Stream API — filter, map, sorted, distinct, limit, skip, count, reduce, anyMatch, findFirst и числовые потоки.