java - 改造 + RxJava : How to request for multiple request in order and assemble results in single Observable?

标签 java android rx-java retrofit2

我正在使用 RxJava + Retrofit。

比如有文章

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;
    ...
}

还有两个服务

  • Observable<List<User>> getUserByUserIds(List<Long> userIds)
  • Observable<List<Article>> listArticles(int pageIdx, int pageMax)

我想列出 10 篇文章,以及相关的作者用户信息,将它们组装成类似于 Observable<List<Pair<Article, User>>> 的内容,这可能吗?

最佳答案

这应该可以解决问题:

listArticles(int pageIdx, int pageMax)
.flatMapIterable(list->list)
.flatMap(article ->
     getUserByUserIds(article.userId)
     .subscribeOn(Schedulers.io())
     .flatMapIterable(list->list),
     Pair::of
)
.toList();

但是,API 的规范很糟糕; Observables 已经有一个固有的顺序,不需要将所有东西都包装在一个列表中。 getUserByIds - 它会返回单个用户还是多个用户?为什么不为 User 方法设置一个 id?为什么域对象中的 ID 不是原语?您希望商品没有 ID 吗?

关于java - 改造 + RxJava : How to request for multiple request in order and assemble results in single Observable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39661192/

相关文章:

java - Java中RS232口通信

Java数组问题

android - 为手机或平板电脑充电时的能量流入

android - Rxjava while循环获取数据库对象并上传到服务器

rx-java - 带有 Observable.just() 和一个参数的 RxJava flatMap

java - 当表名包含空格时,通过 JDBC 从 FileMaker 表中选择

java - Android:SQL - 代码行为不同

java - 集成加载器和回收器 View 不起作用

Android EditTextPreference 对话框样式/主题

rx-java - 在后台线程上可观察到的进程