我有一个id列表,并且有一个获取id并返回Observable<Boolean>
的方法,它使用ID执行操作,如果成功则返回true。
假设我有用户ID(1),我需要使用此方法Observable<Boolean> updateProfile(int id)
更新他的个人资料,这没关系并且正常工作。
我现在需要的是为多个id创建方法,如果所有配置文件都更新,则返回true。它可能有此签名Observable<Boolean> updateAllProfiles(int[] ids)
如何实现这样的目标?
答案 0 :(得分:3)
假设您要单独更新每个配置文件并在所有更新结束后返回true,则可以使用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
或类似的情况下创建新线程)并将累积所有结果指示并相应地返回true / false。
顺便说一下,您可能需要考虑Completable
而不是Observable<Boolean>
,这非常适合“无效”。更新方法(您可以阅读我的解释here)
答案 1 :(得分:0)
Observable<Boolean> updateAllProfiles(Integer[] ids) {
return Observable.from(ids)
.flatMap(id -> updateProfile(id))
.all(success-> success);
}