对api.bookings的调用将以预定义的顺序返回预订列表。调用api.order()会返回一个预订,但有一些额外的信息。应用flatMap()后,预订列表的顺序困惑了。 (bookings.toList()只是Bookings的列表)。如何按.from(bookings.toList())发出的顺序获取zip函数中的值。注意:我无法使用toSortedList,因为我无法比较两个预订。

bookingsSubscription = api.bookings()
                    .flatMap(bookings ->
                        Observable.zip(
                            Observable
                                .from(bookings.toList())
                                .flatMap(booking -> api.order(booking.orderId)),

                            Observable.from(bookings.toList()),

                            (newBooking, oldBooking) -> {
                               // at this point newBooking != oldBooking
                            }
                    ).toList())
                    .subscribe(callback);

api顺序

最佳答案

concatMap可以使用,但不会提供所需的并发性。另一方面,concatMapEager将。

等效的选项是手动创建List<Observable>并使用Observable.zip(Iterable, FuncN)组合列表。这将与concatMapEager具有相同的效果。

参见RxJava issue 3017进行讨论。

10-07 19:51