Получение начальной эмиссии Observable позже в его дереве

Дан горячий Observable<String> myObservable, который выдает значения через неравные промежутки времени. Я хотел бы иметь возможность flatMap и obs1 Observable, и в зависимости от результата obs1 я хочу flatMap и obs2 с начальным значением myObservable. В качестве примера рассмотрим код ниже:

myObservable
   .flatMap(stringResult -> myObject.getObs1(stringResult))
   .flatMap(result -> {
              if (result) {
                    myObject.getObs2(stringResult); // Here I would like to get stringResult emitted by myObservable but I can't
              } else {
                    Observable.just(result); // We continue with the "same" initial Observable 
              }
   });

Решением было бы сохранить myObservable в переменной и получить его последнее значение во втором flatMap, но я не смог этого добиться, поэтому я ищу более элегантное решение. Спасибо.


person E-Kami    schedule 03.05.2016    source источник


Ответы (1)


Вы можете поместить второй flatMap в функцию первого flatMap следующим образом:

    myObservable.flatMap(stringResult -> {
                return myObject.getObs1(stringResult).flatMap(result -> {
                    if (result) {
                        myObject.getObs2(stringResult);
                    } else {
                        Observable.just(result);
                    }
                });
            });
person zsxwing    schedule 03.05.2016
comment
На самом деле, это было настолько очевидно, что я не знаю, как я это пропустил. спасибо за помощь - person E-Kami; 03.05.2016