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

Modify observable to interval type on the fly

我正在尝试解决特定问题。根据发出的内容,我想将 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 }

您可以尝试这样的操作:

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 就会被释放,因此您始终只获得最新的 Observable 的发射。