gpt4 book ai didi

java - RxJava/安卓 : Combine result of two dependent Observables

转载 作者:搜寻专家 更新时间:2023-10-30 21:31:43 25 4
gpt4 key购买 nike

我有两个 Observables .

  1. Observable<A> getAObservable()返回 A 的 Observable|
  2. Observable<B> getBObservable(A)返回“B”的 Observable。

在这里Observable<A>应该在 Observable<B> 之前执行这样它就可以传递结果 AgetBObservable()方法。现在一次Observable<B>完成我需要结合这些 observable 的结果和 Observable<AB>应该返回。

尝试过的选项:

  1. Observable<A>并在其上应用 flatMap 以便它转换结果 B .现在我无法访问 A数据。因此我不能返回 Observable

    1. 我可以使用 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);
}
}
);

关于java - RxJava/安卓 : Combine result of two dependent Observables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36639458/

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