即时修改可观察到的间隔类型
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 的发射。
我正在尝试解决特定问题。根据发出的内容,我想将 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 的发射。