我写了一个简单的代码测试。我创建了一个集成流,并应用了一个开关映射。
from the docs i found online in tutorials throughout
:
另一方面SwithMap()是完全不同于
平面图和ConcatMap。SwitchMap总是返回最新的观测值
Observable.fromIterable(mutableListOf(1,2,3,4,5,6))
.switchMap { x-> Observable.just(x)}
.subscribe{ Timber.d {"my result $it" }}
我希望结果只有一个值。我不知道switch Map是否像concatMap一样是顺序的,但我只期望一个值。
所以我期待着这样的结果:
-
我的成绩1我的成绩2我的成绩3我的成绩4我的成绩5我的成绩
为什么不返回最新的一个并丢弃整数流中的其他可观测值呢?那么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" }}
有什么能帮我解释一下为什么我需要延期。我尝试了以下方法,但没有立即奏效:
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" }}
rule about switch map
应该是:SwitchMap只会在特定的延迟后发出最新的可观测数据。它忽略了前面所有的。
它在从提要检索最新数据时非常有用。当您需要在许多提要中标识最新的提要时,它很有用。
我能确认一下这是正确的吗?