rx-java - 动态修改 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)
}
}
对于 every item
,如果满足条件,这将创建一个每秒Observable
发射一个随机数。
使用,每次外层发出一个新的 ,前一个内层被释放,这样你总是得到最新的`Observable 的发射。Double
switchMap
Observable
item
Observable
推荐阅读
- spring-boot - 动态更改 Spring Data 查询字符串
- php - Laravel 7:无法在全新安装时运行开发
- sql - JPA PostreSQL 多对多关系选择并按关系数量排序
- maven - 我对 springboot-web-embed-tomcat 有依赖问题,它在日志中给了我以下错误
- .net - .NET Core 中的 TallComponents
- python - 迭代地组合字符串并删除第一个字符串
- unity3d - 在赛车游戏中吸收碰撞时的冲击力
- javascript - VueJS在单个文件中选择组件
- typescript - 有没有办法在 Firebase 中创建经过身份验证的用户 ID 之前更改它们。它们由 facebook 提供商创建
- flutter - 使用 Kotlin 开发 Flutter 插件与使用 Java 编写的插件有什么不同吗?