RxJava:在不同线程上合并可观察对象

时间:2020-05-03 09:28:08

标签: java kotlin rx-java2

我需要合并在不同线程上运行的两个可观察对象。示例代码是

val obs1 = Observable
    .create<Int> { emitter ->
        emitter.onNext(1)
        emitter.onComplete()
    }
    .subscribeOn(Schedulers.newThread())

val obs2 = Observable.just(2)

val obs = Observable
    .just(1, 2)
    .flatMap {
        Observable.merge(
            Observable.just(it).filter { it == 1 }.flatMap { obs1 },
            Observable.just(it).filter { it == 2 }.flatMap { obs2 }
        )
    }
    .serialize()

obs.blockingSubscribe(::println)

期望输出为1, 2,有时会得到2, 1
serialize()似乎无济于事。
如何获得正确的排放指令-1, 2

1 个答案:

答案 0 :(得分:0)

已迅速找到合适的解决方案:)

val obs = Observable
    .just(1, 2)
    .concatMap {
        if (it == 1) obs1 else obs2
    }