2017-04-15 1 views
0

Ich habe eine einfache Klasse:Rx java aufgeteilt unendlichen Strom in Gruppen und debounce jede Gruppe getrennt

public class Event { 
    String objectId; 
} 

und einige Ereignisquelle, die Ereignisse an meine beobachtbaren emittiert. Diese Quelle ist unendlich und kann Ereignisse mit derselben objectId mehrmals senden.
Also, ich möchte Werte nach objectId gruppieren und dann jede Gruppe entprellen.
Lassen Sie uns sagen, wenn ich
E1-E1-E2-E1-E2-E2-E2...E2-E1-E100..
ich erreichen möchte:
E1
E2
..
E2
E1
E100
..
mit gleichen objectId don So, Events‘ t wird mehr als einmal in 1s ausgegeben.

Antwort

3

Sie können Ihre Beschreibung nehmen "Also, ich möchte Werte nach ObjektId gruppieren und dann jede Gruppe entprellen." und wandeln sie direkt an die Betreiber:

  1. "Gruppenwerte von objectId" ->Observable.groupBy
  2. "debounce jede Gruppe" ->Observable.map und Observable.debounce
  3. und es schließlich zu einem einzigen Strom verschmelzen zurück ->Observable.merge

Drehen in:

Observable.merge(
    <source>.groupBy(value -> value.objectId) 
      .map(observable -> observable.debounce(1, TimeUnit.SECONDS)) 
) 
+0

Danke, wo rked. –