RxJava / Android: Объедините результат двух зависимых наблюдений

У меня есть две Observables .

  1. Observable<A> getAObservable() Возвращает наблюдение за A
  2. Observable<B> getBObservable(A) Возвращает наблюдаемое значение «B».

Здесь Observable<A> должен выполняться перед Observable<B> чтобы он мог передать свой результат A getBObservable() . Теперь, когда 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>

Codebase:

 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:

  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); } } );