Intereting Posts
Скрытие заголовка панели действий не работает в старых версиях Android (с помощью ActionBarSherlock) Как остановить ScrollView от прокрутки до нижней части текущей загруженной страницы в WebView Проблема с Aquery Android на Android 4.4 Kitkat Как добавить RecyclerView в xml в android Lollipop Могу ли я отслеживать, какие ключевые слова заставляют пользователей находить мое приложение в Google Play? Skobbler Maps на Android показывает черный экран Как сделать просмотр текста интерактивным в Android? Ошибка Strange xml: неправильная строка заканчивается Производительность видео в формате rtsp при запуске браузера с целью запуска приложения Почему статический метод в java принимает только конечные или не конечные переменные в своем методе, но не статические? Может кто-нибудь объяснить мне, почему это утечка? ACTION_SENDTO для отправки электронной почты SpeechRecognizer на Android Wear Как создать макет с вкладками полностью в XML? Способы прокси-сервера InputStream

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