java - 如何在应用 flatMap() 后保留列表的顺序?

标签 java rx-java

调用 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/

相关文章:

java - RxJava : return random objects from Observable correctly

java - 如何在 spring data solr 中搜索关键字作为忽略大小写?

android - Single.defer() 未执行

android - RxJava Single and Room 错误处理问题

java - 如何使用 ConnectableObservable 预取然后将处理后的数据用于不同的订阅者

java - 连接并返回 Observable

java - 解码简单 xml

java - Web服务中的Spring Security CAS实现

java - 如何实现忽略某些输入值的方法? ( java )

变量声明时的Java内存使用情况?