我做了一个 RxJava2 实验,包括以下步骤:
结果:由于异步操作, 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/