gpt4 book ai didi

android - 按顺序执行 2 个可观察对象并立即获取结果 - RxJava 2

转载 作者:行者123 更新时间:2023-12-02 17:57:07 25 4
gpt4 key购买 nike

我有这个功能:

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个可观察量组合起来并返回1个可观察量,这会将两个可观察量的结果放入CombinedResult对象中,这里的问题是< strong>zip 函数将可观察量组合到并行上。

我想要与 zip 相同的东西,它按顺序执行可观察对象并以 BiFunction 或类似的方式返回结果。

解决办法是什么?

最佳答案

observable1 上使用 flatMap 运算符,并结合 observable2zip 运算符:

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 Lambda:

return observable1.flatMap(a -> Observable.just(a).zipWith(observable2, CombinedResult::new));

关于android - 按顺序执行 2 个可观察对象并立即获取结果 - RxJava 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42509312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com