首页 > 解决方案 > 动态修改 observable 为区间类型

问题描述

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

因此,例如:

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 }

标签: rx-javarx-java2

解决方案


你可以尝试这样的事情:

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

对于 every item,如果满足条件,这将创建一个每秒Observable发射一个随机数。 使用,每次外层发出一个新的 ,前一个内层被释放,这样你总是得到最新的`Observable 的发射。Double
switchMapObservableitemObservable


推荐阅读