gpt4 book ai didi

rx-java - RxJava 2-Observable.flatMapSingle澄清

转载 作者:行者123 更新时间:2023-12-04 14:23:15 31 4
gpt4 key购买 nike

我做了一个 RxJava2 实验,包括以下步骤:

  • 根据对象的列表创建一个Observable。
  • 使用flatMapSingle()将Observable发出的每个项目映射到SingleSource。在flatMapSingle()内部,对Observable 发出的每个项目执行异步操作。
  • Observable.toList()
  • 收集了 ListB 中的所有项目

    结果:由于异步操作, ListA 的项目顺序与 ListA 的顺序不同。

    因此,似乎flatMapSingle()就像 flatMap()一样工作,因为它使用合并运算符,并且不能保证将保留元素的顺序。

    我的结论正确吗?文档没有涵盖我,也没有关于此行为的讨论。

    最佳答案

    flatMap不保证按评论中提到的@akarnokd的顺序进行排序。

    如果您想保证订购,可以使用concatMap,但它只能与内部Observable串联。在RxJava1和RxJava2中似乎都没有concatMapSingle版本。不过,您可以通过自己使用Single将内部Observable转换为toObservable(),然后将其与concatMap一起使用(以Kotlin编写的代码)来解决此问题。

    Observable
    .fromIterable(listA)
    .concatMap { single.toObservable() }
    .toList() // Items in the list has same order of listA

    请注意,还有 concatMapEager会急切地订阅内部 Observable(或上例中的 Single),这可能有助于改善并行化任务。

    关于rx-java - RxJava 2-Observable.flatMapSingle澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47176437/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com