2017-02-23 35 views
0

У меня есть два наблюдаемых, каждый из которых вернет список объектов. Я хотел бы собрать этот список, а затем использовать функцию DiffUtil от Android, чтобы удалить несуществующие элементы из первого списка. У кого-нибудь есть какие-либо идеи для этого, кроме того, что можно было стрелять из другого наблюдаемого из onComplete первого наблюдаемого? Или это даже возможно?Как собрать выбросы двух наблюдаемых в разные списки? используя RxJava?

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

ответ

1

Просто используйте zip оператор:

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

Можно ли поймать выбросы от первого наблюдаемого перед тем, как закрепить его другим наблюдаемым? –

+0

Простейшим способом будет использование doOnNext(), на первом наблюдаемом – yosriz

0

Для двух списка я бы использовать оператор слияния

/** 
* 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); 

} 

Вы можете увидеть больше примеров здесь https://github.com/politrons/reactive

+0

Проблема заключается в том, что слияние и сбор не будут поддерживать порядок выбросов из обоих списков вместе – yosriz