调用 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进行讨论。
关于java - 如何在应用 flatMap() 后保留列表的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27355036/