Il y a eu un cas où je voulais regrouper les données prises en entrée par RxJava selon une certaine règle et les recevoir.
Je ne veux pas rassembler des valeurs non contiguës, donc toMultiMap ()
et [groupBy ()
](http://reactivex.io/ RxJava / javadoc / rx / Observable.html # groupBy) ne peut pas être utilisé.
Ça ressemble à ça. Veuillez ne pas manquer l'utilisation de «vrai» et «faux» contrairement au titre.
Le jugement de la même valeur devrait être possible avec .distinctUntilChanged ()
.
import rx.Observable;
public class RxJavaPlayground {
public static void main(String[] args) {
Observable.just(false, false, true, true, false, true, true)
.publish(p -> {
return p.buffer(() -> p.distinctUntilChanged());
})
.filter(x -> x.size() > 0)
.subscribe((x) -> System.out.println(x));
/*
* =>
* [false, false]
* [true, true]
* [false]
* [true, true]
*/
}
}
Au moment où de nouvelles données sortent (le regroupement se termine) avec .distinctUntilChanged ()
Les données accumulées jusqu'à ce point sont sorties (la fonction de .buffer ()
).
Puisque .buffer ()
et .distinctUntilChanged ()
lisent ʻObservable, il est mis à chaud avec
.publish () `.
http://stackoverflow.com/questions/31314345/rxjava-buffer-wind
Recommended Posts