1. ホーム
  2. rx-java

[解決済み] RxJavaのObservable、Completable、Singleの違いは何ですか?

2022-06-23 13:37:18

質問

RxJavaのObservable、Completable、Singleの違いをわかりやすい例で説明していただける方、いらっしゃいますか?

どのようなシナリオで、他のものより1つを使用するのでしょうか?

どのように解決するのですか?

Observable は一般的なReactiveXのビルディングブロックであり、時間の経過とともに値を放出するイベントソースです。(従って、ReactiveX が拡張するすべての言語に存在します)

要するに Observable イベントは

onNext* (onCompleted | onError)? /(* ゼロ以上 ? - ゼロまたは1)

Single そして Completable は、RxJavaでのみ導入された新しい型です。 Observable の縮小型を表し、より簡潔なAPIを持っています。

Single 表す Observable を表し、単一の値またはエラーを出力します。

Completable 表す Observable は、値を出力せず、終端イベントのみを出力します。 onError または onCompleted

差分は、メソッドが返す差分のようなものだと考えればよいでしょう。

  • オブジェクトのコレクション - Observable

  • 単一オブジェクト - Single

  • と値を返さないメソッド(voidメソッド) - Completable.

Single は、タスク指向のObservableで、単一の値を期待する場合に適しています。例えば、ネットワークリクエストは一度実行されると値(またはエラー)を返しますが、ネットワークコールは一回で操作されます。他の例としては、DBのデータフェッチ操作がある。

Completable がある場合に適切です。 Observable を持っていて、操作の結果得られる値には興味がない、あるいは何もない場合に適しています。 例えば、キャッシュの更新のようなもので、操作は成功するか失敗するかのどちらかですが、値はありません。

もう一つの例は、何も返さない長時間実行される初期化操作です。これは、成功表示のみをもたらしたUPDATE/PUTネットワーク呼び出しである可能性があります。

いずれにせよ、CompletableとSingleは新しい機能を追加するのではなく、APIが公開するObservableの背後にある操作についてより多くを語る、より堅牢で簡潔なAPIを導入しているのです。

編集する。

RxJava2 Maybe :

RxJava2には、新しい型である Maybe , Maybe の組み合わせは Completable とSingleの組み合わせです。

上のような同じ言語で Maybe を返すメソッドと考えることができます。 Optional を返すメソッドと考えることができます。 Optional はObjectのラッパーで、何らかの値を持っているかどうかを明示的に教えてくれます -。 Object であるかどうかを明示的に伝えます(NULLの代わりに)。

と共に Maybe のように正確に値を指定することもできます。 Single のように何も返さないこともできます。 Completable . さらに、両方のように、エラーが発生します。

MaybeObservable が値を持たず、そのまま完了する可能性があることを示したい場合に有効です。

例として、キャッシュから取得した場合、必ずしもキャッシュに値があるとは限らないので、この場合、補完されることになります。 onNext をキャッシュからの値で補完します。

これは、RxJava2でストリーム中の非NULL値を処理するのにも価値があります。

RxJava2 Flowable :

まず、背圧の定義について説明します。 バックプレッシャーとは、データが処理できる速度よりも速く生成される状況に対処するための手段です。 Flowable にはバックプレッシャーのサポートがあり、ダウンストリームがアイテムを要求することができます。 違いについて詳しくは はこちら .