改装+;RxJava:如何按顺序请求多个请求,并将结果组装到单个可观察对象中?
我正在使用RxJava+改型 例如,有一篇文章改装+;RxJava:如何按顺序请求多个请求,并将结果组装到单个可观察对象中?,java,android,rx-java,retrofit2,Java,Android,Rx Java,Retrofit2,我正在使用RxJava+改型 例如,有一篇文章 public class Article { private Long articleId; private Long userId; private String image; private String text; ... } 和用户 public class User { private Long userId; private String userName; privat
public class Article {
private Long articleId;
private Long userId;
private String image;
private String text;
...
}
和用户
public class User {
private Long userId;
private String userName;
private String image;
...
}
有两种服务
和可观察的getuserbyuserid(列出userid)
可观察列表文章(int-pageIdx,int-pageMax)
我想列出10篇文章,以及相关的作者用户信息,将它们组合成类似于
可观察的
,有可能吗?一种方法可能涉及使用zip操作符,它可以将多个可观察的组合在一起。你可以读更多。只需将这两个可观察值传递给zip运算符即可这应该可以实现以下目的:
listArticles(int pageIdx, int pageMax)
.flatMapIterable(list->list)
.flatMap(article ->
getUserByUserIds(article.userId)
.subscribeOn(Schedulers.io())
.flatMapIterable(list->list),
Pair::of
)
.toList();
然而,API的规格很差;可观察对象已经有了固有的顺序,不需要将所有内容都包含在列表中。getUserByIds-它将返回单个用户还是多个用户?为什么不给用户一个单一的id方法呢?为什么域对象中的ID不是原语?您是否希望有没有ID的项目?您正在寻找其他人提到的使用zip运算符的运算符。示例
listArticles
和GetUserByUserId
是相关的,我必须首先调用并获取文章作者用户ID,然后再进行第二次调用,zip操作适合于发出同步的不相关请求。感谢您的回答,GetUsersByUserId
返回用户列表。我的意思是,为了节省一些流量和服务器负载,只需一次呼叫就可以获得多个用户。有没有办法我只能打两个电话(一个用于获取文章,另一个用于获取相关用户)?至于域对象中的ID属性not primitive,我只是从Hibernate反向工程(是的,从服务器端)复制了它们,我不太在乎,我应该做一些研究!谢谢你的回答。zip操作似乎是用于进行同步调用的,它不符合我的要求。然后,您可能希望使用compose操作符提供一个自定义转换器,该转换器将从第一个调用获取ID并返回,以便第二个调用可以使用它