1)我有方法Observable> moviesWithoutGenres()返回电影列表但电影的类型字段为空
2)我有方法Observable> movieGenres(电影m)返回指定字段的类型列表
我需要实现应返回Observable>的方法列表中的每部电影都有流派列表。
我已经实现了这样的流,但我的解决方案是使用Observable.from()转换为Observable,而不是使用Observable>使用toList()运算符。这个解决方案是不可接受的,因为我在第一个方法的引擎下使用SQLBrite包装器进行反应式sql查询。由于流始终保持打开状态,因此不会调用onCompleted,因此可以将对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();
答案 0 :(得分:3)
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()。诀窍是因为movieGenres是一个无限的可观察的你必须.first()它以便调用onComplete()并且toList()将正常工作