web-dev-qa-db-ja.com

シングルvsObservable in Java RX

新しいリリースでは、reactiveXはObservableのバリアントとしてSingleを導入しました http://reactivex.io/documentation/single.html

私の現在のユースケースでは、複数の実行があり、それぞれが単一の結果しか返さないので、これは素晴らしいことです。したがって、Observableの使用からSingleの使用に変更すると意味があります。

しかし、ユースケースの一部として、上記の複数の実行では、後でそれらを1つのObservableストリームに連結する必要があります(上記のすべての実行から結果を取得するため)。

だから今私の質問は、パフォーマンスの面でより有益なものは何ですか?

  1. 実行ごとにObservableを使用しますが、実行では1つの結果しか返されないことがわかっています。

または

  1. 実行ごとにシングルを使用し、後でストリームを連結する必要がある場合にのみ、それらをObservableに変換しますか?

ありがとうございました。

13
Xitrum

Singleは、単一の値の応答を期待する場合に使用することを目的としています。
一方、Observableはストリームまたはベクトル値に使用されます。
したがって、リアクティブパターンに関しては、結果が1つだけで、データを操作したくない場合は、シングルを使用するだけで十分です。

5
Leo Droidcoder

私の知る限り、あなたの状況を完全に理解しているのであれば、シングルに前述の複数実行ステートメントを処理させ、前述のシングルを1つのオブザーバブルと組み合わせるのが理にかなっています。

パフォーマンス上の理由から、これを行うための優れたドキュメントは見つかりませんが、可能な場合はシングルを使用する方がよい理由を論理的に説明できます(ただし、主要なリファクタリングに関しては雑草に陥っています)。

回答:あなたのケースと同様のObservableを使用する状況を考えてみてください(単一の値を返すだけであることがわかっています)。 Singleの場合、値が発行された後すぐにOnSuccessメソッドに切り替えるロジックがありますが、Observablesでは、それが最後であることを確認してからOnCompleteを呼び出す必要があります。

おそらく別の開発者が参加する可能性がありますが、その背後にあるロジックは理にかなっているようです。

2
Chad Van De Hey

Observableに単一の値(またはエラー)を返してから終了させることが適切な場合があります。ここにそれについての素晴らしい説明があります: http://angusmorton.com/rx-single/

1
solidak