2016-08-29 4 views
1

Ich verwende RxJava, in dem ich eine Reihe von Observables basierend auf einer Bedingung dynamisch erstellen möchte. Sobald ich mit dem Erstellen fertig bin, möchte ich die verschiedenen Werte, die von den Observablen zurückgegeben werden, verarbeiten und dann als einzelnes Beobachtungsobjekt senden, auf das ich mich abonnieren kann. IchRxJava: dynamisch erstellen Observables und senden Sie das endgültige Ergebnis als Observable

List<String> valueList = .... 

List<Observable<String>> listOfObservables = new ArrayList<Observable<String>>(); 

for(int i =; i <valueList.size(); i++){ 
     listOfObservables.add(new SomeClass.doOperation(valueList(i))); 
     // SomeClass.doOperation will return an Observable<String> 
    } 

return Observable.merge(listOfObservables); 

Aber hier möchte ich auf den Werten eine Operation zu tun, emittiert von verschiedenen Observablen im listOfObservable und schließlich bringen Sie es als eine einzige Observable<String>

Wie in Observable.zip(),: Hier ist, wie mein Code kann dies tun

return Observable.zip(observable1, observable2, (string1, string2) -> { 
      // joining final string here 
      return string1 + string2; 

Aber ich kenne die Anzahl der Argumente hier. Bitte lassen Sie mich wissen, wie ich das erreichen kann.

Antwort

0

Verwenden Sie die zip Überlastung that takes a variable number of arguments, hat es eine Unterschrift von

<R> Observable<R> zip(Iterable<? extends Observable<?>> ws, 
         FuncN<? extends R> zipFunction) 

Beispiel Nutzung:

List<String> valueList = .... 

return Observable.from(valueList) 
    .map(string -> SomeClass.doOperationThatReturnsObservable(string)) 
    .toList() 
    .flatMap(listOfObs -> Observable.zip(listOfObs, (Object[] results) -> { 
     // do something with the strings in the array. 
     return Arrays.stream(results) 
        .map(Object::toString) 
        .collect(Collectors.joining(",")); 
    })); 
+0

können Sie bitte mehr erklären? Wie kann ich die einzelnen Strings für die Operationen bekommen? – v1shnu

+0

Ich habe eine Beispielverwendung hinzugefügt. Denken Sie daran, dass, wenn Sie sich nicht um Ordnung kümmern, vielleicht "merge" dann "reduce" einfacher sein wird. –

+0

Danke Mann. Das funktioniert großartig! – v1shnu

Verwandte Themen