2016-06-04 1 views
1

Je travaille dans une interface graphique et j'ai plusieurs types d'événements qui peuvent entraîner la désactivation d'un bouton. J'ai essayé plusieurs façons de combiner ces deux observables, mais chaque solution que j'ai trouvée a nécessité que les deux Observables publient un événement avant qu'un résultat soit produit. Par exemple, dans ce code:RxJava zip qui agit sur chaque changement des deux parents

public class Test { 

    public static void main(String[] args) { 
     PublishSubject<Boolean> conditionAStream = PublishSubject.create(); 
     PublishSubject<Boolean> conditionBStream = PublishSubject.create(); 

     conditionAStream 
       .zipWith(conditionBStream, (conditionA, conditionB) -> conditionA && conditionB) 
       .subscribe(result -> System.out.println(result)); 

     conditionAStream.onNext(false); 
     conditionBStream.onNext(false); 
     //Expected output: false 

     conditionAStream.onNext(true); 
     //Expected output: false 

     conditionBStream.onNext(true); 
     //Expected output: true 

     conditionAStream.onNext(false); 
     //Expected output: false 
    } 
} 

Mais la sortie que je reçois est:

false 
true 

Est-il possible de combiner à Observables afin qu'ils « cache » le dernier résultat et réagir à chaque changement ?

Répondre

1

Vous recherchez combineLatest() qui émettra à chaque fois que l'un des observables combinés émet. Il faut encore que chacun d'eux émette au moins une fois, mais vous pouvez ajouter .startWith(), à tous vos observables combinés pour vous assurer qu'ils ont une émission initiale.