【问题标题】:RxJava2 combine Observable<List<>> and ObservableRxJava2 结合 Observable<List<>> 和 Observable
【发布时间】:2018-07-22 22:22:50
【问题描述】:

我仍在学习 RxJava 2,并且正在努力构建基于两个 Observable 的 Observable&lt;List&lt;&gt;&gt;

目标是建立一个Observable&lt;List&lt;Schedule&gt;&gt;。 我有 Observable&lt;List&lt;Channel&gt;&gt; getChannels()(= 频道列表)和 Observable&lt;Schedule&gt; getSchedule(long channelId)(= 频道时间表)的 observables。

这是我当前的 Observable,它没有发出 onNext()

Observable<List<Schedule>> oSchedules = getChannels()
    .flatMapIterable(channel -> channel)
    .flatMap(c -> getSchedule(c.id()))
    .toList()
    .toObservable();

Observable<Schedule> getSchedule(long channelId) 
{
...
}

Observable<List<Channel>> getChannels() 
{
...
}

这工作正常,并发出我的数据:

Observable<Schedule> oSchedule = getChannels()
        .flatMapIterable(d -> d)
        .flatMap(i -> getSchedule(i.id(), start, end));

编辑

ToList() 仅在 Observable 的 onComplete 上调用,这就是它不起作用的原因。

【问题讨论】:

  • 这是一种合理的做法。问题是什么?
  • @Héctor 这是 RxJava 2,其中toList 返回Single。如果 OP 再次希望它为 Observable.toObservable 是必要的。
  • 似乎 getSchedule 或 getChannels 正在返回 null
  • Mea Culpa,它不起作用。但是,当不调用 toList 时,我的项目已发出...
  • @akarnokd observable 因“null mapper”错误而失败,我不明白为什么,因为没有 toList,它会发出数据,但作为单个项目(每个 observable 都有效,但不返回 null,我在每个可观察到的相同行为中使用硬编码值进行了测试)

标签: rx-java2


【解决方案1】:

ToList() 仅在 Observable 的 onComplete 上调用,这就是它不起作用的原因。感谢@akarnokd,这就是我最终的结果。

    getChannels()
            .take(1)
            .flatMapIterable(c -> c)
            .flatMap(channel -> getSchedule(channel.id(), start, end)
                    .take(1))
            .toList()
            .toObservable()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    相关资源
    最近更新 更多