[英]RxJava/Android: Combine result of two dependent Observables
我有兩個Observables
。
Observable<A> getAObservable()
返回A
Observable Observable<B> getBObservable(A)
返回'B'的Observable。 這里Observable<A>
應該在Observable<B>
之前執行,這樣它就可以將結果A
傳遞給getBObservable()
方法。 現在一旦Observable<B>
完成,我需要結合這些observable
和Observable<AB>
的結果Observable<AB>
應該返回。
試用的選項:
取Observable<A>
並在其上應用flatMap,以便將結果轉換為B
現在,此時我無法訪問A
數據。 因此我無法返回Observable
zip
這樣一旦我得到Observable<A>
和Observable<B>
的結果,我就可以將它們的結果合並到AB
。 但是在這里我不能設置Observable<A>
應該在Observable<B>
之前執行的依賴,並且我不能將Observable<A>
的結果傳遞給Observable<B>
代碼庫:
public class Data {
A a = new A();
public Observable<AB> getABContext() {
A a = new A();
return getAObservable()
.flatMap(new Func1<A, Observable<AB>>() {
@Override
public Observable<AB> call(final A a) {
return getBObservable(a)
.flatMap(new Func1<B, Observable<AB>>() {
@Override
public Observable<AB> call(B b) {
return Observable.just(new AB(a, b));
}
});
}
});
}
private Observable<A> getAObservable() {
return Observable.just(a);
}
private Observable<B> getBObservable(A a) {
return Observable.just(new B(a));
}
private static class A {
}
private static class B {
B (A a) {
}
}
private static class AB {
AB (A a, B b) {
}
}
}
請參閱flatMap
文檔 。 它有重載方法,適用於zip功能:
Observable<Pair<A, B>> abObservable = getAObservable()
.flatMap(
new Func1<A, Observable<? extends B>>() {
@Override
public Observable<? extends B> call(A a) {
return getBObservable(a);
}
},
new Func2<A, B, Pair<A, B>>() {
@Override
public Pair<A, B> call(A a1, B b1) {
return new Pair<>(a1, b1);
}
}
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.