我做了一个 RxJava2 实验,包括以下步骤:
结果:由于异步操作, ListB 的项目顺序与 ListA 的顺序不同。
因此,似乎flatMapSingle()的工作方式与flatMap()类似,它使用合并运算符并不保证元素的顺序将被保留。
我的结论是否正确?文档没有涵盖我,并且不存在关于此行为的讨论。
答案 0 :(得分:6)
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
),这可能有助于改进并行化任务。