我已经编写了简单的代码进行测试。我创建了一个整数流,并应用了一个转换图。 from the docs i found online in tutorials throughout:
另一方面,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映射是否像concatMap一样是顺序的,但是我只期望一个值。
所以我期待这样的结果:
相反,这是我得到的结果:
为什么不只返回最近的一个并丢弃整数流中的其他可观察值?那么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将在特定的延迟后仅发出最新的可观察到的信号。它会忽略所有先前的内容。 从提要中检索最新数据时,此功能很有用。当您需要在许多提要中识别最新信息时,它很有用。
我可以得到一些确认,这是正确的吗?