RxJava / Android:结合两个依赖的Observable的结果 [英] RxJava/Android: Combine result of two dependent Observables
问题描述
我有两个 Observables
。
-
Observable< A> getAObservable()
返回A
-
Observable< B> getBObservable(A)
返回'B'的Observable。
Observable<A> getAObservable()
Returns Observable ofA
Observable<B> getBObservable(A)
Returns Observable of 'B'.
这里 Observable< A>
应在 Observable< B>
之前执行,以便它可以传递其结果 A
到 getBObservable()
方法。现在一旦 Observable< B>
完成,我需要结合这些 observable
和 Observable<的结果; AB>
应该返回。
Here Observable<A>
should execute before Observable<B>
so that it can pass its result A
to getBObservable()
method. Now once Observable<B>
completes I need to combine the result of these observable
and Observable<AB>
should returns.
选项尝试:
-
取
Observable< A>
并在其上应用flatMap,以便转换
结果B
。现在,此时我无法访问A
数据。
因此我无法返回Observable
Take
Observable<A>
and apply flatMap on it so that it transform result inB
. Now at this point I am not having access toA
data. Hence I can't return Observable
- 我可以使用
zip
这样,一旦我得到Observable< A>
和Observable< B>
的结果,我可以将结果合并到
AB
。但是在这里我不能设置依赖Observable< A>
应该在Observable< B>
之前执行
和我无法将
的结果Observable< A>
传递给Observable< B>
- I can use
zip
so that once I get the result of bothObservable<A>
andObservable<B>
, I can combine their result toAB
. But here I cannot set dependency thatObservable<A>
should execute beforeObservable<B>
and I can't pass the result ofObservable<A>
toObservable<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函数:
See flatMap
documentation. It has overloaded method, that apply zip function:
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);
}
}
);
这篇关于RxJava / Android:结合两个依赖的Observable的结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!