我有两个Observables
。
Observable<A> getAObservable()
返回A
Observable<B> getBObservable(A)
返回&#39; B&#39;。此处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) {
}
}
}
答案 0 :(得分:6)
见flatMap
documentation。它有重载方法,应用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);
}
}
);