Sag*_*han 11 java android reactive-programming rx-java rx-android
我有两个Observables.
Observable<A> getAObservable() 返回Observable AObservable<B> getBObservable(A) 返回'B'的Observable.这里Observable<A>应该先执行,Observable<B>以便它可以将结果传递A给getBObservable()方法.现在一旦Observable<B>完成,我需要结合这些结果observable并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) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
见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);
}
}
);
Run Code Online (Sandbox Code Playgroud)