RxJava

1前書き

このチュートリアルでは、RxJavaの Maybe <T> 型を見てみましょう。これは、単一の値を発行し、空の状態で完了するか、エラーを報告することができるストリームを表します。

2 Maybe タイプ

Maybe は特別な種類のリンクです。/rx-java[ Observable ]は0個または1個のアイテムしか発行できず、ある時点で計算が失敗した場合はエラーを報告します。

この点で、それは Single Completable の和集合のようです。 Maybeを含むこれらすべての縮小型は、 Flowable 演算子のサブセットを提供します。これは、操作が0個または1個の項目に対して意味がある限り、 Maybe Flowable__のように操作できることを意味します。

1つの値しか出力できないため、 Flowable のように背圧処理はサポートされません。

Maybe.just(1)
  .map(x -> x + 7)
  .filter(x -> x > 0)
  .test()
  .assertResult(8);

Maybe ソースから購読できる onSuccess、onError 、および onComplete シグナルがあります。

Maybe.just(1)
    .subscribe(
        x -> System.out.print("Emitted item: " + x),
        ex -> System.out.println("Error: " + ex.getMessage()),
        () -> System.out.println("Completed. No items.")
     );

このソースは成功値を発行するので、上記のコードは Emitted item:1 を出力します。

同じ購読の場合:

  • Maybe.empty()。subscribe(…​) は、印刷されます “完了しました。アイテムはありません。"

  • Maybe.error(new Exception(“ error”))。subscribe(…​) は“ __Errorを出力します。

エラー"__

  • これらのイベントは Maybe と相互に排他的です。** つまり、 onComplete onSuccess の後に呼び出されることはありません。 onComplete は、場合によってはいくつかの onNext 呼び出しが行われた後でも、ストリームが完了したときに呼び出されるため、これは Flowable とは少し異なります。

Single Maybe のような onComplete シグナルを持っていません。なぜならそれは一つのアイテムを放出するか失敗する可能性がある反応的なパターンを捉えることを意味するからです。

一方、 Completable onSuccess を欠いています。これは、完全/失敗の状況のみを扱うことを意図しているからです。

Maybe タイプのもう1つのユースケースは、__Flowableと組み合わせて使用​​することです。

Flowable<String> visitors = ...
visitors
  .skip(1000)
  .firstElement()
  .subscribe(
    v -> System.out.println("1000th visitor: " + v + " won the prize"),
    ex -> System.out.print("Error: " + ex.getMessage()),
    () -> System.out.print("We need more marketing"));

4結論

この短いチュートリアルでは、RxJava Maybe <T> の使い方と、 Flowable、Single 、および Completable. などの他のリアクティブ型との関係について簡単に説明しました。

いつものように、コードサンプルはhttps://github.com/eugenp/tutorials/tree/master/rxjava-2[over on GitHub]にあります。