创建一个可观察列表流 Rxjava 2

create one stream of list of observables Rxjava 2

我有一个 ID 列表,并且有一个采用 ID 和 return Observable<Boolean> 的方法,它正在使用 ID 进行操作,如果成功则 return 为真。

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

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

如何实现这样的目标?

假设您想单独更新每个配置文件并且 return 在所有更新结束后为真,您可以使用 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 或类似的创建新线程)并将累积所有结果指示和 return true/false 相应.
顺便说一句,你可能想考虑 Completable 而不是 Observable<Boolean> 这非常适合 'void' 更新方法(你可以阅读我的解释

  Observable<Boolean> updateAllProfiles(Integer[] ids) {
    return Observable.from(ids)
        .flatMap(id -> updateProfile(id))
        .all(success-> success);
  }