我正在尝试解决一个特定的问题。根据发出的内容,我想将可观察的类型从一种类型交替转换为另一种类型。
例如,
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 }
答案 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
,因此您始终只能获得最新的“可观察到”的发射。