gpt4 book ai didi

java - RxJava : Filtering a List in an Observable (in place)

转载 作者:行者123 更新时间:2023-11-29 04:38:45 24 4
gpt4 key购买 nike

我想调用一个 API 来检索酒店列表。响应返回为 Observable<Response> . Response内对象有一个 List<HotelAvailability> ,并在 HotelAvailability 内对象,有 HotelInfo目的。如果HotelInfonull , 我想删除 HotelAvailability从列表中。我已经使用 Rx 了一半,然后不得不默认回到一个普通的旧迭代器和 while 循环。谁能帮我把这完全 RX 化? (注意:我在 Android 上编写代码并针对相对较低的 SDK,因此 JDK8 解决方案不适合我)。

availabilityApi.getAvailability(hotelName)
.doOnNext(response -> {
Iterator<HotelAvailability> hotelAvailabilityIterator = availabilityResponse.hotelAvailabilities().iterator();
while (hotelAvailabilityIterator.hasNext()) {
if (hotelAvailabilityIterator.next().hotelInfo() == null) {
hotelAvailabilityIterator.remove();
}
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());

最佳答案

您可以平面映射您的列表,以便获得单独的流事件,这样您就可以将它们一个一个地过滤掉,然后您可以将它们聚合回一个列表。

availabilityApi.getAvailability(hotelName)
.map(Response::hotelAvailabilities)
.flatMap(Observable::from)
.filter(hotelAvailability -> hotelAvailability != null)
.toList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());

如果你愿意,你甚至可以通过一次调用来平面映射列表:

flatMap(response -> Observable.from(response.hotelAvailabilities()))

关于java - RxJava : Filtering a List in an Observable (in place),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40136952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com