2016-05-17 12 views
0

Ich habe zwei Observables (O1 & O2), die Elemente verschiedener Typen ausstrahlen. Wenn A.Id in O1 enthalten ist, möchte ich A*.sameId von O2 ignorieren. Die beste Lösung, die ich bisher gefunden habe, ist das Laden aller IDs von O1 in ein Set zuerst (Warten auf onComplete() or blocking). Dann lade ich die Elemente von O2 und vergleiche sie eins nach eins mit den O2 Set mit filter().RxJava vergleiche verschiedene Artikel nach ID von zwei Observablen

Was ist die beste (eleganteste) Art, dies nur mit Operatoren auszudrücken?

Antwort

1

Ja, müssen Sie den vollständigen Satz von O1 Werte von O2 überprüfen:

o1.collect(HashSet::new, (a, b) -> a.add(b)) 
.flatMap(set -> o2.filter(v -> !set.contains(v))) 
... 
+0

sammeln() scheint eine perfekte Passform zu sein! Vielen Dank! – Philipp

+0

Korrekter und prägnanterer Code: .collect (HashSet :: new, HashSet :: add) –

Verwandte Themen