モノラルを変換する方法>IntoFlux
1. 概要
リアクティブプログラミングでは、アイテムの大規模なコレクションの発行者がいる場合があります。 場合によっては、このパブリッシャーの消費者は、一度にすべてのアイテムを処理できない可能性があります。 したがって、消費者の処理速度に合わせて、各アイテムを非同期で公開する必要がある場合があります。
このチュートリアルでは、コレクションのMonoをコレクションののFluxに変換するいくつかの方法を検討します。アイテム。
2. 問題の説明
Reactive Streamsを使用する場合、 Publisher とその2つの実装、FluxとMonoを使用します。 けれど単核症
私たちが持っているとしましょう単核症を開催している出版社単核症 >>
—タイプのアイテムの反復可能なコレクション T 。 私たちの要件は、を使用して非同期でコレクションアイテムを生成することですフラックス
ここでは、上の演算子が必要であることがわかります単核症 >>
この変換を実行できます。 まず、ストリームパブリッシャー Mono からコレクションアイテムを抽出し、Fluxとして非同期でアイテムを1つずつ生成します。
Monoパブリッシャーには、Monoを同期的に変換できるmap演算子と、Monoを非同期的に変換するためのflatMap演算子が含まれています。 また、これらの演算子は両方とも、出力として単一のアイテムを生成します。
でも、 モノを平坦化した後に多くのアイテムを生成するためのユースケース >、flatMapManyまたはflatMapIterableを使用できます
。
これらの演算子の使用方法を見てみましょう。
3. flatMapMany
StringのサンプルListから始めて、Monoパブリッシャーを作成しましょう。
private Mono<List<String>> monoOfList() {
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
return Mono.just(list);
}
The flatMapMany の総称演算子です単核症それは
private <T> Flux<T> monoTofluxUsingFlatMapMany(Mono<List<T>> monoList) {
return monoList
.flatMapMany(Flux::fromIterable)
.log();
}
この場合、 flatMapMany を取る単核症のリスト 、それを平らにし、作成しますフラックス使用している発行元フラックスオペレーター
4. flatMapIterable
Stringの同じサンプルListについて、ここで flatMapIterable —カスタムビルドの演算子について説明します。
ここでは、リストからフラックスを明示的に作成する必要はありません。 リストを提供するだけで済みます。 この演算子は、その要素からFluxを暗黙的に作成します。 ソリューションにflatMapIterableを使用してみましょう。
private <T> Flux<T> monoTofluxUsingFlatMapIterable(Mono<List<T>> monoList) {
return monoList
.flatMapIterable(list -> list)
.log();
}
ここで、 flatMapIterable は、MonoのListを取得し、内部でその要素のFluxに変換します。 したがって、flatMapMany演算子と比較してより最適化されています。 これにより、同じ「1」、「2」、「3」、「4」が出力され、終了します。
5. 結論
この記事では、変換するさまざまな方法について説明しました単核症 >>
の中へフラックス
いつものように、コード例はGitHubで利用可能です。