Rx java RxJava 2-Observable.flatmap单一澄清

Rx java RxJava 2-Observable.flatmap单一澄清,rx-java,rx-java2,Rx Java,Rx Java2,我做了一个RxJava2实验,包括以下步骤: 从对象的列表a创建一个可观察对象 用于将可观察对象发出的每个项映射到单个源。在flatMapSingle()内部,对可观察对象发出的每个项目执行异步操作 收集了列表B中的所有项目,包括 结果:ListB由于异步操作,其项目的顺序与ListA不同 因此,flatMapSingle()的工作原理似乎与使用merge运算符类似,并且不保证元素的顺序将被保留 我的结论正确吗?文档没有包括我,关于这种行为的讨论也不存在。flatMap不保证按照评论中提到的@a

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

  • 从对象的列表a创建一个可观察对象
  • 用于将可观察对象发出的每个项映射到单个源。在flatMapSingle()内部,对可观察对象发出的每个项目执行异步操作
  • 收集了列表B中的所有项目,包括
  • 结果:ListB由于异步操作,其项目的顺序与ListA不同

    因此,flatMapSingle()的工作原理似乎与使用merge运算符类似,并且不保证元素的顺序将被保留


    我的结论正确吗?文档没有包括我,关于这种行为的讨论也不存在。

    flatMap
    不保证按照评论中提到的@akarnokd排序

    如果您想保证排序,您可以使用
    concatMap
    ,但它只允许您与内部
    observatable
    连接。RxJava1和RxJava2中似乎都没有
    concatMapSingle
    的版本。但是,您可以通过自己使用
    toObservable()
    将内部
    Single
    转换为
    Observable
    来解决此问题,并将其与
    concatMap
    一起使用(代码用Kotlin编写)


    请注意,还有一个
    concatmapagear
    ,它将急切地订阅一个内部
    可观察的
    (或上例中的
    单个
    ),这可能有助于改进并行任务。

    按惯例,
    flatMap
    不保证输出事件相对于映射到源中的输入值的顺序。感谢您的立即响应。文档非常清楚
    flatMap
    ,正如您所述。我只是想确认同样的情况也适用于
    flatMapSingle
    (是的,名字里有flatMap,但比抱歉更安全…)
    Observable
        .fromIterable(listA)
        .concatMap { single.toObservable() }
        .toList() // Items in the list has same order of listA