即时修改可观察到的间隔类型

时间:2019-05-02 13:46:21

标签: rx-java rx-java2

我正在尝试解决一个特定的问题。根据发出的内容,我想将可观察的类型从一种类型交替转换为另一种类型。

例如,

Observable.just(Math.random()).flatMap { item ->
 if (item > 0.5) {
convert to interval type and repat new Math.random() every specific time interval 
} else {
leave as it is
}
}

正确地知道我想出了一种我不满意的幼稚方法。

if (needToRepeat) {
make Observable.interval().flatMap { prepareObservable() }
} else { prepareObservable() }

fun prepareObservable() = Observable.just(Match.random()).map { boolean = it.boolean }

1 个答案:

答案 0 :(得分:1)

您可以尝试以下操作:

Observable.just(Math.random())
        .switchMap { item ->
            if (item > 0.5) {
                Observable.interval(1, TimeUnit.SECONDS).map { Math.random() }
            } else {
                Observable.just(item)
            }
        }

对于每个item,如果满足条件,这将创建一个Observable,每秒发出一个随机的Double
使用switchMap时,每次外部Observable发出新的item时,都会处理先前的内部Observable,因此您始终只能获得最新的“可观察到”的发射。