创建一个可观察列表流 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 在所有更新结束后为真,您可以使用 flatMap
和 reduce
的组合:
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);
}
我有一个 ID 列表,并且有一个采用 ID 和 return Observable<Boolean>
的方法,它正在使用 ID 进行操作,如果成功则 return 为真。
假设我有用户 ID (1),我需要使用此方法 Observable<Boolean> updateProfile(int id)
更新他的个人资料,没关系,工作正常。
我现在需要的是为多个 ID 创建方法,如果所有配置文件都更新了 return true。它可能有这个签名 Observable<Boolean> updateAllProfiles(int[] ids)
如何实现这样的目标?
假设您想单独更新每个配置文件并且 return 在所有更新结束后为真,您可以使用 flatMap
和 reduce
的组合:
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);
}