RxJavaのObservable、Completable、Singleの違いは何ですか


113

誰かがRxJavaのObservable、Completable、Singleの違いを明確な例で説明できますか?

どのシナリオで他のものを使用しますか?


何か経験はありますか?
J.チョメル2017年

私は最近始めたばかりです。@ J.Chomel
Raja Jawahar

25
これは完全に有効な質問であり、閉じられるべきではありませんでした。rxは素晴らしいライブラリですが、ドキュメントと例は残念ながら非常に貧弱で混乱しています。
RunLoop 2017年

回答:


247

Observable時間の経過とともに値を出力するイベントソースの汎用ReactiveX構築ブロックです。(したがって、ReactiveXが拡張されたすべての言語に存在します)
簡単に観察できるイベントは次の
とおりです:onNext *(onCompleted | onError)?/(*ゼロ以上?-ゼロまたは1)

SingleおよびCompletableは、RxJavaで独占的に導入されたObservable、より簡潔なAPIを備えたの型を表す新しい型です。

SingleObservable単一の値またはエラーを出力することを表します。

Completable表しObservable、その発しない値が、唯一の端末イベントのいずれかonError、またはonCompleted

返されるメソッドの違いのような違いを考えることができます:

  • オブジェクトのコレクション-観察可能

  • 単一オブジェクト-単一

  • 値を返さないメソッド(voidメソッド)-完了可能。

Singleタスク指向のObservableがあり、1回実行されるネットワークリクエストと戻り値(またはエラー)のように単一の値を期待する場合、ネットワークコールが1回だけ実行されるため、追加の値を返すことを期待しない場合に適しています。時間とともに。別の例は、DBフェッチデータ操作です。

CompletableがありObservable、操作の結果の値が気にならない場合、または何もない場合に適しています。たとえば、キャッシュの更新などの例があります。操作は成功または失敗しますが、値はありません。
もう1つの例は、何も返さない、長時間実行される初期化操作です。成功の表示のみで発生したUPDATE / PUTネットワーク呼び出しである可能性があります。

いずれにせよ、CompletableとSingleは新しい機能を追加していませんが、APIが公開したObservableの背後にある操作の詳細を伝える、より堅牢で簡潔なAPIを導入しています。

編集:

RxJava2 Maybe

RxJava2はと呼ばれる新しいタイプを追加したMaybeMaybeとの組み合わせであるCompletableとのシングル。

上記のような同じ言語MaybeではOptional、なんらかの型を返すメソッドと考えることができます 。これOptionalは、Object(nullではなく)値があるかどうかを明示的に通知するObjectのラッパーです。
Maybe同じようにSingle、値をまったく同じにすることも、何も返さないこともありCompletableます。さらに、両方のように、エラーがあります。
MaybeObservable値を持たない可能性があり、完了するだけであることをマークしたい場合に価値があります。
例はキャッシュからフェッチされます。必ずしもキャッシュに値があるとは限らないため、この場合は完了onNextし、キャッシュから値を取得します。
これは、RxJava2を使用してストリーム内のnull以外の値を処理する場合にも役立ちます。

RxJava2 Flowable

まず、バックプレッシャーを定義しましょう。バックプレッシャーは、データが処理されるよりも速く生成される状況を処理する手段です。 Flowableダウンストリームがアイテムをリクエストできるようにするバックプレッシャーサポートがあります。違いについて詳しくは、こちらをご覧ください


2
流動性はどうですか?
Niraj Chauhan 2017

だから、もし私がコトリンで書いているのならMaybe<T>、本質的にはSingle<T?>
AAverin 2017年

戻り値SingleがあるCompletableと見なすことができますか?
Eido95 2018年

13
  1. FlowableおよびObservableは、有限または無限のストリームを表すことができます。流動性サポート背圧
  2. Singleは、単一の要素を持つストリームです。
  3. 多分 0か1つの要素を持つストリームです。
  4. 最後に、Completableは要素のないストリームを表します。つまり、値なしで完了するか、失敗するだけです。

ここ RXJavaセクションで見つけた簡潔な答え。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.