2016-06-01 8 views
2

concatMap,flatMapswitchMapの違いはわかりますが、ストリームが1つのアイテムのみを出力して完了するとどうなりますか?この場合、これらの2つの演算子は機能的に(意図しない)、同じですが、パフォーマンスはどうですか?入力が単一のアイテムのみを出力する場合、どのオペレータがより多くのリソースを必要としますか?ほとんどの場合、関連性がある場合、出力も単一項目になります。 concatMapflatMapソースはスカラー(すなわち、just)として識別された場合、最新のRxJava 1.xでconcatMap、flatMap、switchMap単一項目の場合

答えて

4

は、オペレータは、完全より低いオーバーヘッドを有するScalarSynchronousSource.scalarFlatMap介してインスタンス化が、Observableカスタム内部により置換されていませんオペレーター。 switchMapは同じことをすることができますが、この場合はまだ最適化されていません(価値がないかもしれません)。

そうでなければ、通常のObservableが単一のアイテムのみを放出するかどうかを検出できないため、演算子はすべての内部動作を実行します。 Singleを使用すると、1つのアイテムまたはエラーが発生したソースで作業することができます。

JMHのベンチマークがたくさんありますが、1つの要素ソースとこれらの演算子を比較するためのベンチマークがあるかどうかはわかりません。たぶん私は1つを追加し、結果を投稿します。

編集

Hereは、比較ベンチマークです。

+0

私の場合、 'switchMap'または' concatMap'のどちらが最善でしょうか? – DariusL

+0

concatMapは、flatMapが単一のソースを排水するためのオーバーヘッドを追加するため、はるかに優れています。 – akarnokd

関連する問題