2016-05-03 8 views
0

Angesichts einer heißen Observable<String> myObservable, die Werte in unregelmäßigen Abständen emittieren. Ich möchte in der Lage sein zu flatMap ein obs1Observable und je nach Ergebnis von obs1 ich flatMap will eine obs2 mit dem anfänglichen myObservable Wert. Als Beispiel den Code betrachten unter:Erhalten der anfänglichen Emission eines Observable später in seinem Baum

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

Eine Lösung wäre es, die myObservable in einer Variablen zu speichern und zu seinem letzten Wert in den diese zweiten flatMap aber ich war nicht in der Lage zu bekommen weder zu erreichen, so bin ich Ich suche eine elegantere Lösung. Danke.

Antwort

1

Sie können die zweite flatMap in die Funktion des ersten flatMap so:

myObservable.flatMap(stringResult -> { 
       return myObject.getObs1(stringResult).flatMap(result -> { 
        if (result) { 
         myObject.getObs2(stringResult); 
        } else { 
         Observable.just(result); 
        } 
       }); 
      }); 
+0

Tatsächlich ist dies ein so offensichtlich war, ich weiß nicht, wie ich das verpasst. Danke für Ihre Hilfe –