Как собрать выбросы двух наблюдаемых в разные списки? используя RxJava?

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

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

person John Ernest Guadalupe    schedule 23.02.2017    source источник


Ответы (2)


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

list1Observable.zipWith(list2Observable,
                (list1, list2) -> {
                //DiffUtil list1 and list2 and return the filtered list
                }
        );
person yosriz    schedule 23.02.2017
comment
Можно ли уловить выбросы от первого наблюдаемого до того, как объединить его с другим наблюдаемым? - person John Ernest Guadalupe; 24.02.2017
comment
Самый простой способ - использовать doOnNext () на первом Observable - person yosriz; 24.02.2017

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

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

person paul    schedule 23.02.2017
comment
Проблема в том, что слияние и сбор не сохранят порядок выбросов из обоих списков вместе. - person yosriz; 24.02.2017