Gruppieren von [RxJava] [1,1,2,2,3,3,1,1] wie [[1,1], [2,2], [3,3], [1,1]] Machen

Zusammenfassung

Es gab einen Fall, in dem ich die von RxJava als Eingabe genommenen Daten nach einer bestimmten Regel gruppieren und empfangen wollte. Ich möchte keine nicht zusammenhängenden Werte zusammenstellen, also toMultiMap () und [groupBy ()](http://reactivex.io/ RxJava / javadoc / rx / Observable.html # groupBy) kann nicht verwendet werden.

Lösung

Es sieht aus wie das. Bitte verpassen Sie nicht die Verwendung von "wahr" und "falsch" im Gegensatz zum Titel.

Die Beurteilung des gleichen Wertes sollte mit .distinctUntilChanged () möglich sein.

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]
		 */
	}
}

Zu dem Zeitpunkt, an dem neue Daten herauskommen (Gruppierung endet) mit .distinctUntilChanged () Die bis zu diesem Punkt gesammelten Daten werden ausgegeben (die Funktion von .buffer ()).

Da "Observable" sowohl von ".buffer ()" als auch von ".distinctUntilChanged ()" gelesen wird, wird es mit ".publish ()" auf "Hot" gesetzt.

Referenz

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

Recommended Posts

Gruppieren von [RxJava] [1,1,2,2,3,3,1,1] wie [[1,1], [2,2], [3,3], [1,1]] Machen
Ich möchte so etwas wie "cls" in Java machen
[Swift] Ich möchte so etwas wie Cs Sprint machen
Was tun, wenn eine javax.batch.operations.JobStartException auftritt?
Wiedereinführung in Betreiber mit RxJava Teil 1
Was tun, wenn Ihnen der von swagger-codegen-cli generierte Code nicht gefällt?