2017-10-11 21 views
0

L'idée est quand j'appelle publishSubject.onNext(someValue) plusieurs fois que je dois obtenir une seule valeur comme debounce opérateur fait, mais il offre la dernière valeur, et je dois passer tous valeurs sauf d'abord dans un groupe jusqu'à ce que j'arrête d'appeler onNext() pendant 1 sec. J'ai essayé d'utiliser quelque chose comme throttleFirst(1000,TimeUnit.MILLISECONDS) mais ça ne fonctionne pas comme le rebond, ça fait juste des fenêtres après chaque livraison et après 1 sec immédiat donne la valeur suivante.RxJava 2 combinaison d'opérateurs qui ne fournit que la première valeur d'un groupe

+1

pouvez publier votre exemple de code? –

Répondre

0

Vous pouvez utiliser le premier opérateur. Comme:

Observable.first() 

Il ne prendra que la première valeur

1

Essayez ceci:

// Observable<T> stream = ...; 
stream.window(stream.debounce(1, TimeUnit.Seconds)) 
     .flatMap(w -> w.take(1)); 

Explication: Si je vous comprends bien, vous voulez émettre des éléments si aucun n'a été émis pour 1 seconde avant. Cela équivaut à obtenir le premier élément suivant un élément débité de 1 seconde. Le diagramme ci-dessous en marbre peut également aider:

enter image description here