RxJavaたぶん
1. 前書き
このチュートリアルでは、the Maybe<T> type in RxJava – which represents a stream which can emit a single value, complete in an empty state or report an errorについて説明します。
2. Maybeタイプ
Maybeは特別な種類のObservableであり、0個または1個のアイテムしか出力できず、ある時点で計算が失敗した場合にエラーを報告します。
この点では、SingleとCompletableの和集合のようなものです。 Maybe,を含むこれらすべての縮小型は、Flowable演算子のサブセットを提供します。 これはwe can work with Maybe like a Flowable as long as the operation makes sense for 0 or 1 items.を意味します
放出できる値は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(…)は“Completed. No items.”を出力します
-
Maybe.error(new Exception(“error”)).subscribe(…)は「Error: error”」を出力します
These events are mutually exclusive for Maybe.つまり、onCompleteはonSuccessの後に呼び出されません。 これはFlowableとは少し異なります。これは、onNextが呼び出された後でも、ストリームが完了するとonCompleteが呼び出されるためです。
Singleには、MaybeのようなonComplete信号がありません。これは、1つのアイテムを放出するか、失敗する可能性のあるリアクティブパターンをキャプチャすることを目的としているためです。
一方、Completableは、完全/失敗の状況のみを処理することを目的としているため、onSuccessがありません。
Maybeタイプの別の使用例は、Flowable.と組み合わせて使用することです。firstElement()メソッドを使用して、FlowableからMaybeを作成できます。
Flowable 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. 結論
この短いチュートリアルでは、RxJavaMaybe<T>の使用法と、それがFlowable, SingleやCompletable.などの他のリアクティブタイプとどのように関連しているかを簡単に確認しました。
いつものように、コードサンプルはover on GitHubで見つけることができます。