【Kotlin/Android】RxJavaのflatMapメソッドの使い方!mapとの違い
この記事からわかること
- Android Studio/KotlinでRxJavaの使い方
- flatMapメソッドとは?
- mapとの違い
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Android Studio:Flamingo
- Kotlin:1.8.20
flatMapメソッドとは?
@CheckReturnValue
@SchedulerSupport(SchedulerSupport.NONE)
public final <R> Observable<R> flatMap(Function<? super T, ? extends ObservableSource<? extends R>> mapper) {
return flatMap(mapper, false);
}
RxJavaのflatMap
メソッドは上流から流れてきた複数のObservableの値を整形して新しいObservableを下流へ流すメソッドです。これによりObservableを直列に繋げたり、上流からの値を元に新規でObservableを作成したりすることができるようになります。
例えばmap
はOutputを受け取り整形して同じObservableを下流へ流します。map
との違いは受け取ったOutputを使用して別のObservableを動作させることができる点です。
val observable1 = Observable.just(1)
val observable2 = Observable.just(2)
Observable.combineLatest(
observable1,
observable2,
{ num1, num2 -> num1 + num2 }
).flatMap { Observable.just(it * 3) } // .map { it * 3 } と同じ挙動
.subscribeBy(
onNext = { result -> Log.d("RxJava", "Received: $result") },
onComplete = { Log.d("RxJava","Completed") }
).addTo(compositeDisposable)
2つのObservableがあるとしてobservable1
の値を元にobservable2
を動作させその結果を下流へ流しています。この際に下流に流れるのは全部で9回になります。
val observable1 = Observable.just(1, 2, 3)
val observable2 = Observable.just(4, 5, 6)
observable1
.flatMap { num ->
observable2.map { letter ->
num + letter
}
}
.subscribe { result ->
Log.d("RxJava", "Received: $result")
}
.addTo(compositeDisposable)
Received: 5
Received: 6
Received: 7
Received: 6
Received: 7
Received: 8
Received: 7
Received: 8
Received: 9
SwiftのCombineのflatMap
の動きもまとめていますので参考にしてください。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。