【问题标题】:Filled model with extra response using Rx使用 Rx 的具有额外响应的填充模型
【发布时间】:2016-11-11 20:55:07
【问题描述】:

我是 Rx java 新手,我目前的任务是我有 2 个请求

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

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

我想将图像 url 从第二个响应模型添加到第一个响应模型。第二个取决于第一个。如何将它们合并到 Rx 流中?

所以第一个请求返回我的新闻列表,然后我需要为每个带有此模型 url 的项目调用 getNewsImage(url),从第二个响应中解析真实图像 url,将其添加到 news 对象并获得填充的最终列表楷模 感谢您的任何建议

【问题讨论】:

  • flatMap 会帮助你。

标签: java android rx-java kotlin rx-android


【解决方案1】:
getNews()
        .flatMap { Observable.fromIterable(it.getTopicsList()) } //or Observable.from() if you use RxJava1
        .flatMap({ getNewsImage(it) }, { topic, imageUrl ->
            topic.imageUrl = imageUrl
            return@flatMap topic
        })
        .toList()

第二个flatMap 将源 Observable 中的项目与由这些源项目触发的 Observable 组合在一起,并发出这些组合。 More info

【讨论】:

  • 谢谢,第二张 flatMap 让我抓狂,希望我能习惯函数式编程
【解决方案2】:

如果我答对了:第一个响应是 List&lt;&gt; 或一些 Collection。所以你可以这样做:

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

P.S. 关于 .from() 的文档,关于 toList() 的文档

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-04
    • 2020-12-24
    • 2016-09-28
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多