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