将两个可观察物组合在一起,而无需使用Tolist(),因为引擎盖下的sqlbrite



1)我有方法可观察> Moviewoutgenres()返回电影列表,但电影类型的字段为null

2)我有可观察的方法> Moviegerres(Movie M),它返回指定字段的流派列表

我需要实现应返回可观察>的方法,并且列表中的每个电影都将具有流派列表。

我已经实现了这样的流,但我的解决方案是使用可观察到的转换来使用observable.from(),而不是使用tolist()操作员观察到。该解决方案是不可接受的,因为我在第一种方法的引擎盖下使用了SQLBrite包装器对反应性SQL查询。on Completed尚未称为流,因为流始终保持打开状态,因此可以将SQL表的更改传播给所有订户。因此,无法执行Tolist操作员。

public class Movie {
    private String id;
    private String title;
    private List<String> genres;
    ...
}

1)Observable<List<Movie>> moviesWithoutGenres();

2)Observable<List<String>> movieGenres(Movie m);

应实现:

Observable<List<Movie>> movies();

public Observable<List<Movie>> movies() {
  return moviesWithoutGenres()
    .switchMap(movies -> Observable.from(movies) // This is an Observable<Movie>
      .concatMap(movie -> movieGenres(movie)
        .first()
        .map(genres -> new Movie(movie.id, movie.title, genres)))
      .toList());
}

observable.from()将发射列表中的项目,然后是oncomplete()。诀窍是因为电影制品是您必须的无尽可观察的。first(),以便将oncomplete()称为ancomplete(),而tolist()将正常工作

相关内容

最新更新