Создайте отфильтрованную наблюдаемую из 2 наблюдаемых списка элементов в RxJava
Я работаю над функцией, где мне нужно отфильтровать данные ответа сети на основе данных локальной базы данных.
Например, мои сетевые уровни возвращают мне список элементов, а мой уровень базы данных возвращает наблюдаемый список идентификаторов. Теперь я хочу вернуть только те объекты сетевого уровня, чей идентификатор соответствует любому из ответа уровня базы данных.
Ниже код выбирает данные из сети и сохраняет результат в базе данных (кеш).
factory.getRemoteDataStore()
.searchForVenues(query)
.toObservable()
.distinctUntilChanged()
.flatMap { venues ->
factory.getCacheDataStore()
.saveVenues(venues)
.andThen(Observable.just(venues))
}
У меня также есть метод, который возвращает список мест, которые должны быть отфильтрованы
factory.getCacheDataStore().getDislikedVenues()
Теперь, как мне расширить предыдущую цепочку, чтобы использовать функцию getDislikedVenues() Observable, чтобы отфильтровать их от ответа сетевого ответа?
Извините за такой вопрос, я действительно борюсь с этим.
1 ответ
Один из способов сделать это
factory.getCacheDataStore().getDislikedVenues()
.flatMap { dislikedItems ->
factory.getRemoteDataStore()
.searchForVenues(query)
.toObservable()
.distinctUntilChanged()
.flatMapIterable { it }
.filter { !dislikedItems.contains(it.id) }
.toList()
.toObservable()
}
.flatMap { venues ->
factory.getCacheDataStore()
.saveVenues(venues)
.andThen(Observable.just(venues))
}
PS: как я понимаю, factory.getRemoteDataStore().searchForVenues(query)
возвращается Single
или же Maybe
, В таком случае distinctUntilChanged()
не работают, потому что это зависит от многократного излучения (onNext()
), но Single
или же Maybe
может излучать только один результат.