【问题标题】:RxJava: Convert stream of individual items to a listRxJava:将单个项目的流转换为列表
【发布时间】:2017-02-24 10:44:43
【问题描述】:

我试图弄清楚如何获取返回项目列表的响应,然后对将返回对象的每个项目发出请求,然后将所有响应组合到一个列表中。

我已经通过一次发出一个来实现它,但我想将它们全部打包回一个列表中。

到目前为止我有这个

getListOfData()
.flatMapIterable(list -> list)
.flatMap(item -> getData(item)

我尝试过 toList() 但我知道这需要一个完整的信号才能返回任何内容。

我正在使用 rxjava 2,我觉得我在 rxjava 1 中使用 toList() 执行了此操作,并且按预期工作。任何帮助将不胜感激!

【问题讨论】:

  • 好吧,除非您想返回一个包含尚未返回的项目的洞的List,否则toList 是要走的路。当所有元素都收到数据后,您将获得列表 - onComplete 直到列表传播后才会传播。
  • 这就是我希望它的行为方式,但我没有得到任何东西,onComplete 似乎永远不会发生,但如果我将它们设为个体,我可以看到我从第一次调用中得到 x 响应然后发出 x 个项目
  • 发出的项目与 onComplete 不同,您确定每个 Observable 都会发出 onComplete 事件吗?

标签: android rx-java rx-android rx-java2


【解决方案1】:

尝试使用fromIterable 而不是flatMapIterable,然后toList() 应该可以工作

【讨论】:

  • 你能举个例子吗?我不太明白如何完成这项工作
【解决方案2】:

这行得通吗?

getListOfData()
.flatMapIterable(list -> list)
.flatMap(item -> getData(item))
.flatMap(itemList -> Observable.from(itemList)) // <-- magic here. Maps each result List<Something> to Observable<Something>

【讨论】:

    【解决方案3】:

    谜团解开了。

    我的原始示例适用于 toList()

    问题是我没有在我的PublishSubject 上调用onComplete 我只是在做onNext 如果我不想发出多个东西,也许我不应该使用PublishSubject

    【讨论】:

    • 如果您使用 PublishSubject 可能会大大简化您的代码 - 通过现有的运算符可能有更好的方法。
    猜你喜欢
    • 2017-05-28
    • 2015-12-31
    • 1970-01-01
    • 2015-06-18
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    相关资源
    最近更新 更多