Regroupement [RxJava] [1,1,2,2,3,3,1,1] comme [[1,1], [2,2], [3,3], [1,1]] Faire

Résumé

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é.

Solution

Ç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 () `.

référence

http://stackoverflow.com/questions/31314345/rxjava-buffer-wind

Recommended Posts

Regroupement [RxJava] [1,1,2,2,3,3,1,1] comme [[1,1], [2,2], [3,3], [1,1]] Faire
Je veux faire quelque chose comme "cls" en Java
[Swift] Je veux faire quelque chose comme sprinftf de C
Que faire lorsqu'une exception javax.batch.operations.JobStartException se produit
Réintroduction aux opérateurs avec RxJava Partie 1
Que faire si vous n'aimez pas le code généré par swagger-codegen-cli