リアクティブプログラミング8日目
今日もRxJava
型変換
ソースやサービスがそこで動作するフローと異なる型を返すことがある
解決手段は2通りあって
1. 目的の型へ変換する
2. 異なる型をサポートする特定の演算子を使う
まぁなんかここははリファレンスを参照としか言いようがない・・・
各使い分け
FlowableはバックプレッシャーがついてるObservableなので説明省く
名前 | 説明 |
---|---|
Observable | 値が複数 |
Single | 値が1つ |
Maybe | 値が1つ or なし |
Completable | 値なし |
目的の型へ変換
RxJavaでは変換を実行して他の型へ一致させる演算子がデフォルトで実装されてる
表は利用可能な変換オプション一覧
Flowable | Observable | Single | Maybe | Completable | |
---|---|---|---|---|---|
Flowable | toObservable | first, firstOrError, single, singleOrError, last, lastOrError(※1) | firstElement, singleElement, lastElement | ignoreElements | |
Observable | toFlowable(※2) | first, firstOrError, single, singleOrError, last, lastOrError(※1) | firstElement, singleElement, lastElement | ignoreElements | |
Single | toFlowable(※3) | toObservable | toMaybe | ignoreElements | |
Maybe | toFlowable(※3) | toObservable | toSingle | ignoreElements | |
Completable | toFlowable | toObservable | toSingle | toMaybe |
※1 multi-valuedをsingle-valuedにする場合は、どの値を結果として返すか考える必要がある
※2 場合によって振る舞いを変更する必要性があるらしい
※3 ソースアイテムが1つの場合はバックプレッシャーを気にする必要はない
Overloadの利用
別の型へ変換してくれるOverloadなやつら
Operator | Overloads |
---|---|
flatMap | flatMapSingle, flatMapMaybe, flatMapCompletable, flatMapIterable |
concatMap | concatMapSingle, concatMapMaybe, concatMapCompletable, concatMapIterable |
switchMap | switchMapSingle, switchMapMaybe, switchMapCompletable |
場合によって使い分けていけって感じだけど、そこそこ分かりやすい。ふむふむ
ここんとこ夜更かしばっかでよくなーい、寝る