按顺序执行 2 个 observables 并立即获得结果 - RxJava 2
Execute 2 observables sequentially and get the result at once - RxJava 2
我有这个功能:
public static class CombinedResult<T, R> {
T t;
R r;
public CombinedResult(T t, R r) {
this.t = t;
this.r = r;
}
public T getObject1() {
return t;
}
public void setObject1(T t) {
this.t = t;
}
public R getObject2() {
return r;
}
public void setObject2(R r) {
this.r = r;
}
}
public static <A, B> Observable<CombinedResult<A, B>> combineObservablesParallel(Observable<A>
return Observable.zip(observable1, observable2, new BiFunction<A, B, CombinedResult<A, B>>() {
@Override
public CombinedResult<A, B> apply(A a, B b) throws Exception {
return new CombinedResult<>(a,b);
}
});
}
它结合了2个observable和return1个Observable,它将两个observable的结果都放到CombinedResult
object,这里的问题是 zip
函数结合了 Paralllel 上的 observables。
我想要与 zip
相同的东西,它按顺序执行可观察对象,return 结果在 BiFunction
或类似的东西中。
有什么解决办法?
在 observable1
上使用 flatMap
运算符结合 observable2
和 zip
运算符:
RxJava 1:
return observable1
.flatMap(new Func1<A, Observable<CombinedResult<A, B>>>() {
@Override
public Observable<CombinedResult<A, B>> call(A a) {
return Observable.just(a).zipWith(observable2, new Func2<A, B, CombinedResult<A, B>>() {
@Override
public CombinedResult<A, B> call(A a, B b) {
return new CombinedResult<>(a, b);
}
});
}
});
RxJava 2:
return observable1.flatMap(new Function<A, ObservableSource<CombinedResult<A,B>>>() {
@Override
public ObservableSource<CombinedResult<A,B>> apply(A a) throws Exception {
return Observable.just(a).zipWith(observable2, new BiFunction<A, B, CombinedResult<A, B>>() {
@Override
public CombinedResult<A, B> apply(A a, B b) throws Exception {
return new CombinedResult<>(a,b);
}
});
}
});
RxJava 2 拉姆达:
return observable1.flatMap(a -> Observable.just(a).zipWith(observable2, CombinedResult::new));
我有这个功能:
public static class CombinedResult<T, R> {
T t;
R r;
public CombinedResult(T t, R r) {
this.t = t;
this.r = r;
}
public T getObject1() {
return t;
}
public void setObject1(T t) {
this.t = t;
}
public R getObject2() {
return r;
}
public void setObject2(R r) {
this.r = r;
}
}
public static <A, B> Observable<CombinedResult<A, B>> combineObservablesParallel(Observable<A>
return Observable.zip(observable1, observable2, new BiFunction<A, B, CombinedResult<A, B>>() {
@Override
public CombinedResult<A, B> apply(A a, B b) throws Exception {
return new CombinedResult<>(a,b);
}
});
}
它结合了2个observable和return1个Observable,它将两个observable的结果都放到CombinedResult
object,这里的问题是 zip
函数结合了 Paralllel 上的 observables。
我想要与 zip
相同的东西,它按顺序执行可观察对象,return 结果在 BiFunction
或类似的东西中。
有什么解决办法?
在 observable1
上使用 flatMap
运算符结合 observable2
和 zip
运算符:
RxJava 1:
return observable1
.flatMap(new Func1<A, Observable<CombinedResult<A, B>>>() {
@Override
public Observable<CombinedResult<A, B>> call(A a) {
return Observable.just(a).zipWith(observable2, new Func2<A, B, CombinedResult<A, B>>() {
@Override
public CombinedResult<A, B> call(A a, B b) {
return new CombinedResult<>(a, b);
}
});
}
});
RxJava 2:
return observable1.flatMap(new Function<A, ObservableSource<CombinedResult<A,B>>>() {
@Override
public ObservableSource<CombinedResult<A,B>> apply(A a) throws Exception {
return Observable.just(a).zipWith(observable2, new BiFunction<A, B, CombinedResult<A, B>>() {
@Override
public CombinedResult<A, B> apply(A a, B b) throws Exception {
return new CombinedResult<>(a,b);
}
});
}
});
RxJava 2 拉姆达:
return observable1.flatMap(a -> Observable.just(a).zipWith(observable2, CombinedResult::new));