2017-02-23 6 views
0

Ich habe zwei Observables jeder wird eine Liste von Objekten zurückgeben. Ich möchte diese Liste sammeln und dann die DiffUtil-Funktion von Android verwenden, um die nicht vorhandenen Elemente aus der ersten Liste zu löschen. Hat jemand irgendwelche Ideen dafür abgesehen davon, eine andere Observable aus dem ersten beobachtbaren onComplete zu feuern? Oder ist das überhaupt möglich?Wie Emissionen von zwei Observablen in verschiedenen Listen sammeln? mit RxJava?

Observable1 -> List1 
Observable2 -> List2 
DiffUtil(List1, List2) 
    delete from List1 items that are non-existent in List2 

Antwort

1

Verwenden Sie einfach zip Betreiber:

list1Observable.zipWith(list2Observable, 
       (list1, list2) -> { 
       //DiffUtil list1 and list2 and return the filtered list 
       } 
     ); 
+0

Ist es möglich, die fangen Emissionen von der ersten Observablen vor dem Zippen mit der anderen Observablen? –

+0

Der einfachste Weg ist die Verwendung von doOnNext(), auf dem ersten Observable – yosriz

0

Zwei Liste würde ich Merge Operator

/** 
* Here we merge two list and we sort the list for every new item added into. 
* Shall return 
* <p> 
* [1, 2, 3, 4, 5, 10, 11, 12, 13, 14, 15] 
*/ 
@Test 
public void testMergeLists() { 
    Observable.merge(Observable.from(Arrays.asList(2, 1, 13, 11, 5)), Observable.from(Arrays.asList(10, 4, 12, 3, 14, 15))) 
      .collect(ArrayList<Integer>::new, ArrayList::add) 
      .doOnNext(Collections::sort) 
      .subscribe(System.out::println); 

} 

können Sie weitere Beispiele siehe hier https://github.com/politrons/reactive

+0

Das Problem ist, dass Zusammenführen und Sammeln nicht die Reihenfolge der Emissionen aus beiden Listen zusammenhalten – yosriz

Verwandte Themen