私はRxJavaを初めて使いました。指定されたコレクションから各TempoAccount
エンティティのデータをダウンロードし、マップaccountsWithProjects
にすべて保存します。最後にonNext(TempoAccount tempoAccount)
のコードが完成したら、filterAccountsWithProjects(accountsWithProjects)
メソッドに電話したいと思います。それを達成するための簡単な方法はありますか?最後のonNext()実行のためのRxJavaコールバックが終了しました
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);
}
});
}
問題:onNext(TempoAccount tempoAccount)
からのすべての観測が完了する前にfilterAccountsWithProjects(accountsWithProjects)
上記のコードでが発射されます。
編集:
私は、このようなタイプの観察可能作成したい:Observable<Map<TempoAccount, Collection<TempoProject>>
を。 私は与えられた2つの観測があります。
Observable<TempoAccount> accountsObservable = Observable.from(tempoAccounts)
Observable<Collection<TempoProject>> projectsForAccountObservable = jira.requestProjectsInfoForTempoAccount(TempoAccount account)
だから私の質問はです:私は何とか彼らをconnnectこれら二つの観測を持つマップを作成することができます。
'flatMap()'は、 'TempoAccount'オブジェクトに関する情報を削除します。私が最後に必要とするのは、 'Collectionに関連付けられた' TempoAccount'オブジェクトのコレクションを取得して、 'TempoProject'オブジェクトに希望の' key'値(あるフィールド)を含むものです。十分に明確かどうかわからない:) –
'map()'メソッドの仕事だと思う。 –
それは依存する。 'flatMap()'は値の新しいストリームを生成することができます。 'map()'は値を新しいものに変換します。それはすべてあなたのユースケースに依存します:) –