RxJava/Android:合并两个依赖的 Observables 的结果
RxJava/Android: Combine result of two dependent Observables
我有两个Observables
。
Observable<A> getAObservable()
Returns 可观察到 A
Observable<B> getBObservable(A)
Returns 可观察到 'B'。
此处 Observable<A>
应该在 Observable<B>
之前执行,以便它可以将其结果 A
传递给 getBObservable()
方法。现在,一旦 Observable<B>
完成,我需要合并这些 observable
和 Observable<AB>
的结果应该 returns.
尝试过的选项:
取 Observable<A>
并在其上应用 flatMap 使其变换
结果 B
。现在我无法访问 A
数据。
因此我不能 return 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
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);
}
}
);
我有两个Observables
。
Observable<A> getAObservable()
Returns 可观察到A
Observable<B> getBObservable(A)
Returns 可观察到 'B'。
此处 Observable<A>
应该在 Observable<B>
之前执行,以便它可以将其结果 A
传递给 getBObservable()
方法。现在,一旦 Observable<B>
完成,我需要合并这些 observable
和 Observable<AB>
的结果应该 returns.
尝试过的选项:
取
Observable<A>
并在其上应用 flatMap 使其变换 结果B
。现在我无法访问A
数据。 因此我不能 return 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
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);
}
}
);