使用rxjava(不带retrolambda),我想做一些api调用并用它完成我的数据。我不完整的对象是带有对象“季节”列表的“tvshow”。这个“季节”是空的,我需要用片段来完成它。

Observable<TvShow> getDataTVShow(long idTvShow)
//get TvShow with empty seasons (except season number)

Observable<Season> getDataSeason(long idTvShow, int seasonNumber);
//get one complete season with episodes

所以我想:
获取我的“tvshow”对象(确定)
从我的“tvshow”对象中遍历季节(list),并为每个季节执行一个api调用,以完全完成季节并更新列表中的“old”季节。
一旦我们拥有了所需的一切,就将数据持久化到数据库中(订阅服务器部分)
直到现在,我只有:
Observable<TvShow> = apiService.getDataTvShow(idTvShow)

我现在需要在季节之间迭代,我试图使用操作符'map'从'tvshow'对象切换到我的季节列表(tvshow.getseasons()),但我不确定是否有好的方法。除此之外,我知道“doonnext”将用于更新我的“旧”季节,就这样。
我试着用这个很好的例子:Handling lists with RxJava and Retrofit in android但是我仍然被困在:(
如果你能帮我解决这个问题,那就太好了:)

最佳答案

例如,您有两个可观察到的:

Observable<Season> getSeason(int id)
Observable<TvShow> getTvShow(String id)

如何加载tvshow然后加载每个季节并填充tvshow:
  Observable<TvShow> getFilledTvShow = getTvShow("123")
      .flatMap(tvShow ->
              //make stream observable from seasons
              Observable.from(tvShow.seasons)
                  //load each season from network
                  .flatMap(season -> getSeason(season.id))
                      //then collect all results to ArrayList
                  .collect(() -> new ArrayList<Season>(),
                      (seasons, filledSeason) -> seasons.add(filledSeason))
                      //finally fill tvShow and return it
                  .map(filledSeasons_ -> {
                     tvShow.seasons = filledSeasons_;
                     return tvShow;
                  })
      );

10-06 06:05