【发布时间】:2016-07-04 10:40:15
【问题描述】:
我是 RxJava 新手。我想从给定的集合中为每个TempoAccount 实体下载一些数据,并将其全部存储在地图accountsWithProjects 中。当最后一个onNext(TempoAccount tempoAccount) 的代码完成后,我想调用filterAccountsWithProjects(accountsWithProjects) 方法。有没有一些简单的方法来实现它?
private void getProjectsForEachTempoAccount(Collection<TempoAccount> tempoAccounts) {
final Map<TempoAccount, Collection<TempoProject>> accountsWithProjects =
new HashMap<>(tempoAccounts.size());
Observable<TempoAccount> accountsObservable = Observable.from(tempoAccounts);
accountsObservable
.compose(ObservableUtils.applySchedulers())
.subscribe(new ObserverAdapter<TempoAccount>() {
@Override
public void onError(Throwable e) {
view.notifyAboutError(e.getMessage());
}
@Override
public void onNext(TempoAccount tempoAccount) {
jira.requestProjectsInfoForTempoAccount(String.valueOf(tempoAccount.getId()))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new ObserverAdapter<Collection<TempoProject>>() {
@Override
public void onError(Throwable e) {
view.notifyAboutError(e.getMessage());
}
@Override
public void onNext(Collection<TempoProject> projects) {
accountsWithProjects.put(tempoAccount, projects);
}
});
}
@Override
public void onCompleted() {
filterAccountsWithProjects(accountsWithProjects);
}
});
}
问题:在上面的代码中,filterAccountsWithProjects(accountsWithProjects) 在来自onNext(TempoAccount tempoAccount) 的所有可观察对象完成之前被触发。
编辑:
我想创建一个这种类型的 Observable:Observable<Map<TempoAccount, Collection<TempoProject>>。
我有两个 observables:
Observable<TempoAccount> accountsObservable = Observable.from(tempoAccounts)Observable<Collection<TempoProject>> projectsForAccountObservable = jira.requestProjectsInfoForTempoAccount(TempoAccount account)
所以我的问题是:我能否以某种方式连接它们并创建具有这两个可观察对象的地图。
【问题讨论】:
标签: java android synchronization rx-java