rxjava-SwitchMap-为什么不返回整数流中最新的可观测值?

时间:2018-11-08 09:12:46

标签: rx-java2

我已经编写了简单的代码进行测试。我创建了一个整数流,并应用了一个转换图。 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一样是顺序的,但是我只期望一个值。

所以我期待这样的结果:

  • 我的结果6

相反,这是我得到的结果:

  • 我的结果1我的结果2我的结果3我的结果4我的结果5我的结果 6

为什么不只返回最近的一个并丢弃整数流中的其他可观察值?那么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" }}

我认为rule about switch map应该是:SwitchMap将在特定的延迟后仅发出最新的可观察到的信号。它会忽略所有先前的内容。 从提要中检索最新数据时,此功能很有用。当您需要在许多提要中识别最新信息时,它很有用。

我可以得到一些确认,这是正确的吗?

0 个答案:

没有答案