如何在Android上将多个http请求和数据库查询与Rxjava结合起来

如何在Android上将多个http请求和数据库查询与Rxjava结合起来,android,rx-java,Android,Rx Java,为了过滤数据,我需要执行多个http请求和一个数据库查询 我正在使用Rxjava的zip操作符 为了准备多个http请求,我执行了以下操作 List<Observable<List<Picture>>> requests = new ArrayList<>(); for(String id : photoIds) { requests.add(pictureRepository.searchPicture(id).toObserva

为了过滤数据,我需要执行多个http请求和一个数据库查询

我正在使用Rxjava的zip操作符

为了准备多个http请求,我执行了以下操作

 List<Observable<List<Picture>>> requests = new ArrayList<>();


 for(String id : photoIds) {
    requests.add(pictureRepository.searchPicture(id).toObservable());
 }
List requests=new ArrayList();
用于(字符串id:photoID){
add(pictureRepository.searchPicture(id.toObservable());
}
为了准备数据库请求,我执行了以下操作

Observable<List<Favourite>> favourites = pictureRepository.getFavourites().toObservable();
Observable favorites=pictureRepository.GetFavorites().toObservable();
我试图创建可观察的,但rxjava不接受我的代码

Observable.zip(
        requests, favourites,
        new BiFunction<Object[], List<Favourite>, List<FavouritePictures>>() {
            @Override
            public List<FavouritePictures> apply(Object[] t1, List<Favourite> t2) throws Exception {
                return /*here I want to check the favourites and return a list*/;
            }
        }
);
Observable.zip(
请求、收藏夹、,
新的双函数(){
@凌驾
公共列表应用(对象[]t1,列表t2)引发异常{
return/*在这里,我想查看收藏夹并返回列表*/;
}
}
);
有没有办法做到这一点?
谢谢

下面是一个可能适用于此的解决方案:

val photoIds = listOf(1, 2, 3)
var index = 0

Observable.just(0).flatMapSingle {
        pictureRepository.searchPicture(photoIds[index])
        index += 1
    }.repeatUntil {
        index + 1 == photoIds.size - 1
    }.toList().zipWith(pictureRepository.getFavourites(),
         BiFunction { listOfPictures, listOfFavoratePictures ->
             // Return your list
         })
  • 该可观察流将以发射0开始
  • 然后,它将流平面映射到单个可观察流,并从searchPicture调用返回可观察流
  • 此过程将继续,直到达到最后一个项目索引
  • 然后我们将要发出的结果映射为一个列表
  • 最后,我们使用getFavorites调用压缩单个可观察对象
    您也可以使用递归方法实现这一点,但我个人认为这更具可读性。

    请指定您的结果应该是什么样子?收藏夹将发布多少列表?是否要将每个收藏夹发射与每个列表发射组合,还是要将最新收藏夹发射与最新列表组合?我的结果应该是图片列表,其中数据库中标记为收藏夹的图片应将字段“收藏夹”标记为true。换句话说,我想标记最喜欢的图片,但仍然显示那些不是最喜欢的图片