rx-java2 - rxjava - SwitchMap - 为什么它不返回整数流中最近的 observable?
问题描述
我已经编写了简单的代码进行测试。我创建了一个整数流,并应用了一个开关图。 从我在整个教程中在线找到的文档中:
另一方面,SwithMap() 是与 FlatMap 和 ConcatMap 完全不同的运算符。SwitchMap 总是返回最新的 Observable 并从中发出项目。
Observable.fromIterable(mutableListOf(1,2,3,4,5,6))
.switchMap { x-> Observable.just(x)}
.subscribe{ Timber.d {"my result $it" }}
我期望结果只有一个值。我不知道 switch Map 是否像 concatMap 一样是连续的,但我只期望一个值。
所以我期待这样的结果:
- 我的结果 6
相反,这是我得到的结果:
- 我的结果1 我的结果2 我的结果3 我的结果4 我的结果5 我的结果6
为什么不只返回最近的一个并丢弃整数流中的其他 observables 呢?那么 switchMap 的目的是什么?
更新:在 switchMap 添加延迟后,它会产生预期的结果。但我不清楚为什么:
Observable.fromIterable(mutableListOf(1,2,3,4,5,6))
.switchMap { x-> Observable.just(x).delay(1, TimeUnit.SECONDS);}
.subscribe{ Timber.d {"my result $it" }}
现在我得到了预期的结果:
- 我的结果 6
可以帮助解释为什么我需要延迟。我尝试了以下方法,但没有延迟:
Observable.fromIterable(mutableListOf(1,2,3,4,5,6))
.switchMap { x-> Observable.just(x)}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe{ Timber.d {"my result $it" }}
我认为关于 switch map 的规则应该是: SwitchMap 在特定延迟后只会发出最新的 observable。它忽略了所有以前的。在从提要中检索最新数据时,它很有用。当您需要在许多提要中识别最新的时,它很有用。
我能得到一些确认这是正确的吗?
解决方案
推荐阅读
- api - 为条带订阅添加试用日期
- python - Django 和 AWS S3:存储和保护私有文件
- linux - tsv-summarize:找不到命令
- java - 在 Wicket 中的有效输入提交上,FeedbackPanel 显示的错误消息未清除
- sql - 将 SQL 表从长数据转换为宽数据
- android - activity_main.xml 中缺少类
- html - 如何在html css vue上为下拉选择制作网格视图选项?
- javascript - Rollup with framer-motion,isPropValid 情感函数错误
- sitefinity - sitefinity TypeError: kendo.syncReady 不是函数
- linux - 过滤 ansible playbook 输出