四畳半の秘密基地

さあ、今日はどんな実験をしよう

MENU

RxJava2.0の基本クラスを学ぶ

今さらですがRxJava2.0について学びたいと思います。

RxJava2.0ではObservableに似たクラスとしてFlowable, Maybeが追加されています。
今回は復習の意味も込めて、Observable, Single, Completable, Maybeの違いについて調べてみたいと思います。 Flowableはだいぶ特殊でObservableで扱うストリームでバッファを考慮するとき等に使うようで、(自分にとっては)現状あまり用途がないので割愛します。

Observable

0~N個のオブジェクトの流れ、完了、エラーを扱います。

プログラム

Observable.range(1, 10)
        .subscribe(System.out::println);

出力結果

1
2
3
4
5
6
7
8
9
10

Single

1つのオブジェクトの流れ、エラーを扱います。 onCompleteは呼ばれないです。

プログラム

Single.just(1)
        .subscribe(System.out::println);
                

出力結果

1

Completable

オブジェクトの流れは扱わず、完了かエラーの判定のみ扱います。

完了

プログラム

Observable<Integer> observable = Observable.range(1, 10);

Completable.fromObservable(observable)
        .subscribe(
                () -> System.out.println("Complete!"),
                e -> System.out.println(e.getMessage()));

出力結果

Complete!

エラー

プログラム

Completable.fromObservable(observable)
        .subscribe(
                () -> System.out.println("Complete!"),
                e -> System.out.println(e.getMessage()));

出力結果

damepo

Maybe

0~1個のオブジェクト、エラーを扱います。 onCompleteは呼ばれます。

プログラム

Maybe.just(1)
        .filter(integer -> integer == 2)
        .defaultIfEmpty(3)
        .subscribe(System.out::println);

出力結果

3

感想

SingleとMaybeの違いが分かりづらいです。 Singleに0個のオブジェクトの時の処理を追加したのがMaybeなのかな・・・。もっと勉強しないと!

参考URL

GitHub - ReactiveX/RxJava: RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM. RxJava2.0 Observable, Single, Maybe, Completableの使い分けメモ - Qiita