RxJava 2 - Observable.flatMapSingle澄清

Ευά*_*λης 6 rx-java rx-java2

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

  1. ListA的对象创建一个Observable .
  2. 使用flatMapSingle()将Observable发出的每个项映射到SingleSource.在flatMapSingle()内部,对Observable发出的每个项执行异步操作.
  3. 使用Observable.toList()收集ListB中的所有项

结果:数组listB有其不同的顺序项目利斯塔由于异步操作.

因此,似乎flatMapSingle()的工作方式类似于flatMap(),因为它使用了合并运算符,并不保证元素的顺序将被保留.

我的结论是否正确?文档没有涵盖我,并且不存在关于此行为的讨论.

one*_*iew 7

flatMap 并不保证在评论中提及的@akarnokd订购.

如果你想保证订购,你可以使用,concatMap但它允许你只与内部连接Observable.似乎concatMapSingleRxJava1和RxJava2都没有版本.你,但是,可以通过转换内部变通办法,SingleObservable利用toObservable()自己与使用concatMap这样的(写在科特林代码).

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

请注意,concatMapEager还会热切地订阅内部Observable(或Single上面的示例),这可能有助于改进并行化任务.