![](/img/trans.png)
[英]Convert Observable of List to List of Observables and merge in RxJava
[英]RxJava. Convert hot observable of list to single item stream, process it and convert to list back
假设我有一些物品清单的热门观察;
Observable<List<Item>> observable = ...;
我需要将其转换为单个项目流,并对每个项目执行一些操作,例如过滤,之后我应将其转换回列表并在订户的onNext
方法中对其进行处理:
observable.flatMap(Observable::from)
.filter(Item::isFiltered)
.toList()
.subscribe(this::onNext, this::onError)
public void onNext(List<Item> items) {...}
乍一看似乎还可以,但是不是,因为我们的observable 很热 ,所以toList()永远不会执行(因为它等待源可观察的完成),并且整个流都卡住了。
我该如何解决这个问题? 另外请注意,在filter
附近可能有多项针对单个项目的其他操作。
您可以对单个项目执行所有操作,并可以在flatMap
创建的Observable上执行最终的toList
运算符。这样,您将收到onComplete调用,并且toList
将收集并转换项目。
observable.flatMap(list -> {
return Observable.from(list)
.filter(Item::isFiltered)
.toList()
})
.subscribe(this::onNext, this::onError)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.