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

时间:2017-05-21 12:11:17

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

我有一个id列表,并且有一个获取id并返回Observable<Boolean>的方法,它使用ID执行操作,如果成功则返回true。

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

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

如何实现这样的目标?

2 个答案:

答案 0 :(得分:3)

假设您要单独更新每个配置文件并在所有更新结束后返回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或类似的情况下创建新线程)并将累积所有结果指示并相应地返回true / false。
顺便说一下,您可能需要考虑Completable而不是Observable<Boolean>,这非常适合“无效”。更新方法(您可以阅读我的解释here

答案 1 :(得分:0)

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