如何合并flatMapIterable中的项目

时间:2016-02-29 22:39:43

标签: java rx-java

我有一个无限的可观察(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而导致订阅者无法访问。

2 个答案:

答案 0 :(得分:3)

您可以使用flatMap + toList:

处理第一个flatMap中的List
db.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(...)