Rx Java: объединение наблюдаемых в разных потоках - PullRequest
0 голосов
/ 03 мая 2020

Мне нужно объединить две наблюдаемые, работающие в разных потоках. Пример кода:

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 голосов
/ 03 мая 2020

Быстро нашли правильное решение:)

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