有你有它:
requestAllAccounts().flatMap(new Func1<Collection<Account>, Observable<Account>>() {
@Override
public Observable<Account> call(Collection<Account> accountCollection) {
return Observable.from(accountCollection);
}
}).flatMap(new Func1<Account, Observable<Pair<Account, Collection<Project>>>>() {
@Override
public Observable<Pair<Account, Collection<Project>>> call(Account account) {
return Observable.just(account).zipWith(requestProjectsInfoForTempoAccount(account),
new Func2<Account, Collection<Project>, Pair<Account, Collection<Project>>>() {
@Override
public Pair<Account, Collection<Project>> call(Account account, Collection<Project> projects) {
return new Pair<Account, Collection<Project>>(account, projects);
}
});
}
}).toList()
.flatMap(new Func1<List<Pair<Account, Collection<Project>>>, Observable<Map<Account, Collection<Project>>>>() {
@Override
public Observable<Map<Account, Collection<Project>>> call(List<Pair<Account, Collection<Project>>> pairs) {
Map<Account, Collection<Project>> map = new HashMap<Account, Collection<Project>>();
for (Pair<Account, Collection<Project>> pair : pairs) {
map.put(pair.first, pair.second);
}
return Observable.just(map);
}
});
這到底是怎麼回事?
- 獲取所有帳戶。
- 拆分列表爲單一賬戶
- 調用搜索在單一賬戶項目,並返回
Pair<Account, Collection<Project>>
- 合併的所有對象
- 變換
List<Pair<Account, Collection<Project>>>
到Map<Account, Collection<Project>>
謝謝,我只想解決一個問題:你創建的observable發出了許多'Map>'實例。每個實例只有一個Map.Entry。訂閱前有沒有辦法將它們全部合併到一個Map中? –
你確定嗎?如果函數requestAllAccounts()和requestProjectsInfoForTempoAccount(Account accunt)只返回集合一次(一個onNext(...)調用),它應該按預期工作。 –
是的,對不起,你說得對。我試圖用lambda表達式重寫它,並搞砸了一些東西。再次感謝! –