1. Введение
Java Stream ApiПредоставляет множество полезных API-интерфейсов, которые позволяют нам легко преобразовывать коллекции или несколько элементов одного типа в потоки для работы. Сегодня мы увидим, как объединитьStreamпоток.
2. Слияние потоков
StreamПредпосылка слияния потоков заключается в том, что типы элементов могут быть согласованы.
2.1 concat
Самый простой способ объединить потоки черезStream.concat()
статический метод:
Stream<Integer> stream = Stream.of(1, 2, 3);
Stream<Integer> another = Stream.of(4, 5, 6);
Stream<Integer> concat = Stream.concat(stream, another);
List<Integer> collect = concat.collect(Collectors.toList());
List<Integer> expected = Lists.list(1, 2, 3, 4, 5, 6);
Assertions.assertIterableEquals(expected, collect);
Это слияние должно объединить два потока в тандеме:
2.2 Объединение нескольких потоков
Для слияния нескольких потоков мы также можем использовать описанный выше метод для выполнения «операции с куклой»:
Stream.concat(Stream.concat(stream, another), more);
Можно продолжать слой за слоем, если будет слишком много потоков для слияния, это будет выглядеть не очень четко.
Я представил один раньшеОперация плоской карты потока, его общий процесс может относиться к этой картинке внутри:
Поэтому мы можем пройтиflatmap
Чтобы реализовать объединение нескольких потоков:
Stream<Integer> stream = Stream.of(1, 2, 3);
Stream<Integer> another = Stream.of(4, 5, 6);
Stream<Integer> third = Stream.of(7, 8, 9);
Stream<Integer> more = Stream.of(0);
Stream<Integer> concat = Stream.of(stream,another,third,more).
flatMap(integerStream -> integerStream);
List<Integer> collect = concat.collect(Collectors.toList());
List<Integer> expected = Lists.list(1, 2, 3, 4, 5, 6, 7, 8, 9, 0);
Assertions.assertIterableEquals(expected, collect);
Этот метод заключается в том, чтобы сначала сгенерировать несколько потоков в качестве элементов для создания типаStream<Stream<T>>
поток, а затем перейти кflatmap
Мозаичные операции сливаются.
2.3 Сторонние библиотеки
Существует множество сторонних библиотек для улучшенияStreamEx,Jooλможно объединить. Дополнительные библиотеки реактивного программированияReactor 3так же может бытьStreamПотоки объединяются в реактивные потоки, что может быть полезно в определенных сценариях. Покажите это здесь:
List<Integer> block = Flux.fromStream(stream)
.mergeWith(Flux.fromStream(another))
.collectList()
.block();
3. Резюме
если вы используетеJava Stream Api, объединитьStreamПотоки — это часто встречающиеся операции. Краткое введение в слияние сегодняStreamПотоковый способ, надеюсь, он работает для вас. яКод Фермер Маленький Толстый Брат, уделять больше внимания! Больше галантереи в продаже.
关注公众号:Felordcn获取更多资讯