2016-02-29 95 views
1

我有一個無限可觀察(db觀察者),它發出有限序列的項目,需要處理然後作爲一個組發回。如何合併flatMap中的項目MapIterable

這裏的問題是,如何編寫它以便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 

沒有達到被卡住等待DbObservableonComplete由於toList用戶。

回答

1

你可以處理列表與flatMap + toList第一flatMap內:

db.map(q -> q.items) 
    .flatMap(items -> Observable.from(items).flatMap(...).toList()) 
    .subscribe(...) 
1

toList()等待onCompleted()事件,但flatMap(/*process*/)不傳播完成。

所以,你需要給他們打電話內新flatMap()

db.map(q -> q.items) 
    .flatMap(items -> Observable.from(items) 
     .flatMapIterable(items) 
     .flatMap(/*process*/) 
     .toList() 
    ) 
    .subscribe(...) 
+1

你能解釋一下答案嗎? – hardkoded