2016-11-11 48 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()