【问题标题】:create one stream of list of observables Rxjava 2创建一个可观察的列表流Rxjava 2
【发布时间】:2017-05-21 12:11:16
【问题描述】:

我有一个 id 列表,并且有一个方法接受一个 id 并返回 Observable<Boolean>,它正在使用该 ID 进行操作,如果成功则返回 true。

假设我有用户 id (1),我需要用这个方法更新他的个人资料 Observable<Boolean> updateProfile(int id) ,没关系,工作正常。

我现在需要的是为多个 id 创建方法,如果所有配置文件都已更新,则返回 true。它可能有这个签名Observable<Boolean> updateAllProfiles(int[] ids)

如何实现这样的目标?

【问题讨论】:

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


    【解决方案1】:

    假设您要单独更新每个配置文件并在所有更新结束后返回 true,您可以使用 flatMapreduce 的组合:

    Observable<Boolean> updateAllProfiles(Integer[] ids) {
        return Observable.from(ids)
                .flatMap(id -> updateProfile(id))
                .reduce((prevResult, currResult) -> prevResult && currResult);
    }
    

    及用途:

    updateAllProfiles(new Integer[]{0, 1, 2, 3, 4})
                .subscribe(updateAllSucceed -> { //do something with result});
    

    这将并行触发所有更新(假设每个更新配置文件将作用于 Scheduler.io 或类似的创建新线程)并将累积所有结果指示并相应地返回真/假。
    顺便说一句,您可能需要考虑Completable 而不是Observable&lt;Boolean&gt;,这非常适合“无效”更新方法(您可以阅读我的解释here

    【讨论】:

      【解决方案2】:
        Observable<Boolean> updateAllProfiles(Integer[] ids) {
          return Observable.from(ids)
              .flatMap(id -> updateProfile(id))
              .all(success-> success);
        }
      

      【讨论】:

        猜你喜欢
        • 2017-05-13
        • 2014-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-14
        • 1970-01-01
        相关资源
        最近更新 更多