我有一个无限的可观察(db观察者),它发出有限的项目序列,需要处理,然后作为一个组发回。
这里的问题是,如何编写它以便toList
不等待原始源完成,而是替换flatMapIterable生成的序列;
DbObservable.map(new Func1<Query, List<Item>>() {
@Override
public List<Item> call(Query query) {
return query.items; //get items from db query
}
})
.flatMapIterable(new Func1<List<Item>, Iterable<Item>>() {
@Override
public Iterable<Item> call(List<GeoStop> geoStops) {
return geoStops;
}
})
.flatMap(/*process*/)
.toList() // regenerate List that was passed in to flatMapIterable
//subscribe and emit list of items
由于toList
等待DbObservable
onComplete
而导致订阅者无法访问。
答案 0 :(得分:3)
您可以使用flatMap + toList:
处理第一个flatMap中的Listdb.map(q -> q.items)
.flatMap(items -> Observable.from(items).flatMap(...).toList())
.subscribe(...)
答案 1 :(得分:3)
toList()
等待onCompleted()
事件,但flatMap(/*process*/)
传播不完整。
因此,您需要在新的flatMap()
db.map(q -> q.items)
.flatMap(items -> Observable.from(items)
.flatMapIterable(items)
.flatMap(/*process*/)
.toList()
)
.subscribe(...)