【Kotlin/Android】RxJavaのconcatWithメソッドの使い方!直列処理の実装

【Kotlin/Android】RxJavaのconcatWithメソッドの使い方!直列処理の実装

この記事からわかること

  • Android Studio/KotlinRxJava使い方
  • ObservableconcatWithメソッドの使い方
  • 非同期処理順番実行するには?

index

[open]

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

みんなの誕生日

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

posted withアプリーチ

環境

Operator:concatWithメソッドの使い方

RxJavaのObservableで使用できるOperatorのconcatWith非同期処理を順番に処理するためのメソッドです。「非同期処理Aの完了後に非同期処理Bを実行したい」場合などObservable直列に繋げたい場合に使用します。Completableの場合はandThenメソッドが同じ役割になります。

完了後に実行したい非同期処理concatWithメソッドの引数に渡します。

Log.i("RxJava", "処理開始")

val observable1 = Observable.just(1, 2, 3)
val observable2 = Observable.just(4, 5, 6)

// observable1が完了した後にobservable2を実行
observable1.concatWith(observable2)
    .subscribe { println("Received: $it") }
    .addTo(compositeDisposable)

例えば上記の場合は「処理開始」が出力されobservable1が全て出力された後にobservable2が実行されることになります。concatWithメソッドにObservableを渡した場合はさらにメソッドチェーンで複数のObservableを掛け合わせて実装することも可能です。

Log.i("RxJava", "処理開始")

val observable1 = Observable.just(1, 2, 3)
val observable2 = Observable.just(4, 5, 6)
val observable3 = Observable.just(7, 8, 9)

observable1
    .concatWith(observable2)
    .concatWith(observable3)
    .subscribeBy(
        onNext = {
            Log.i("RxJava", it.toString())
        }
    ).addTo(compositeDisposable)
  1. 処理開始
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8. 7
  9. 8
  10. 9

異なる非同期処理を渡す

concatWithメソッドの引数に渡す非同期処理はObservable以外でも問題ありません。

val observable1 = Observable.just(1, 2, 3)
val observable2 = Observable.just(4, 5, 6)
var completable1 = Completable.timer(3, TimeUnit.SECONDS)

observable1                   // 最初に実行
    .concatWith(completable1) // observable1が完了後に実行
    .concatWith(observable2)  // completable1が完了(3秒)後に実行
    .subscribe {
        Log.i("RxJava", it.toString())
    }.addTo(compositeDisposable)

concatメソッドの使い方と違い

concatconcatWith同様に非同期処理を順番に処理するためのメソッドです。違うのは以下の点になります。

concatWithメソッド

concatメソッド

そのため複数のObservableを直列に繋げるときはconcatメソッドを使用することでスッキリ記述することが可能です。

Log.i("RxJava", "処理開始")

val observable1 = Observable.just(1, 2, 3)
val observable2 = Observable.just(4, 5, 6)
val observable3 = Observable.just(7, 8, 9)

Observable.concat(observable1, observable2, observable3)
    .subscribeBy(
        onNext = {
            Log.i("RxJava", it.toString())
        }
    )
    .addTo(compositeDisposable)

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

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

searchbox

スポンサー

ProFile

ame

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

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

New Article

index