【Kotlin/Android】RxJavaのflatMapメソッドの使い方!mapとの違い

この記事からわかること

  • Android Studio/KotlinRxJava使い方
  • flatMapメソッドとは?
  • mapとの違い

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

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を作成したりすることができるようになります。

例えばmapOutputを受け取り整形して同じ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の動きもまとめていますので参考にしてください。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index