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]にあります。