2016-08-02 22 views
1

Ich benutze mehrere Filter auf meiner Observable und ich würde Fälle am Ende der Filterung berichten, wenn das Ergebnis leer war. Ich kann es nicht am Ende der Verarbeitung tun, weil dies zu beobachten soll, mit einem anderen verknüpft werden:RxJava: wie etwas wie doOnEmpty zu codieren?

 Observable.just(1, 2, 3) 
       .concatWith(
         Observable.just(2, 4, 6) 
           .filter(value -> ((value % 2) != 0)) 
           // report if empty 
       ) 

Antwort

1

mit diesem Rückfall etwas zu tun, verwenden Sie Transformers.doOnEmpty verwenden können von rxjava-extras, die auf Maven Central ist:

source.compose(Transformers.doOnEmpty(action)) 

Sie können diese Lösung verwenden, wenn Sie gepflegt über die Effizienz (Zuweisungen/Leistung), aber ansonsten verwenden Sie die @ dwursteisen-Lösung.

2

Sie können switchIfEmpty und Observable

Observable.just(2, 4, 6) 
      .filter(value -> ((value % 2) != 0)) 
      // replace the empty observable with an empty observable 
      // but this observable will log when it will completed 
      .switchIfEmpty(Observable.<Integer>empty().doOnTerminate(() -> System.out.println("empty !"))) 
      .subscribe();