2016-11-11 86 views
1

我新,其中Rx java和我當前的任務是多餘的反應充滿模型我有2個請求使用的Rx

@GET(NEWS_LIST) 
fun getNews(): Observable<NewsResponse> 

@GET 
fun getNewsImage(@Url url: String): Observable<NewsImage> 

和我想的圖像URL添加到從第二屆一個1響應模型。第二個取決於第一個。如何將它們合併到Rx流中?

所以第一個要求返回我的新聞列表,然後我需要從這個模型網址撥打getNewsImage(url)每個項目,從第二反應解析真實圖像的URL,把它添加到news對象並獲取最終名單與填充模型 謝謝任何建議

+1

'flatMap'會幫助你。 –

回答

2
getNews() 
     .flatMap { Observable.fromIterable(it.getTopicsList()) } //or Observable.from() if you use RxJava1 
     .flatMap({ getNewsImage(it) }, { topic, imageUrl -> 
      topic.imageUrl = imageUrl 
      [email protected] topic 
     }) 
     .toList() 

flatMap組合從源可觀察與由那些源項目觸發的可觀察的項目,併發射這些的組合。 More info

+1

謝謝,第二flatMap驅使我堅果,我希望我會習慣功能編程 – Gorets

2

如果我得到正確的:第一個反應是List<>或一些Collection。所以你可以這樣做:

getNews().from() 
    .flatmap(new Func1<1stResponseItem, 2dnResponseItem>() { 
     @Override 
     public 2dnResponseItem call(1stResponseItem response) { 
      return getNewsImage(response.getImageUrl()); 
     } 
    }) 
    .tolist() 

P.S.文檔約.from(),約toList()