我需要链接两个可观察变量,第二个依赖于第一个。 所以我有:
Observable 1->请愿返回Observable
//kotlin
fun getTvShow(): Observable<TvShow> {
return retrofitPetitionGetShow()...
}
//java
Observable<TvShow> getTvShow(){
return retrofitPetitionGetShow()...
}
Observable 2->返回Single >
Observable.range(1, TvShow.totalSeasons)
.flatMap { seasonNumber: Int ->
retrofitPetitionGetSeason(seasonNumber)....
}.toList()
我需要的是将第二个可观察到的结果(List TvShow.setList(List<Season>)
中,然后将其返回。
提前谢谢
答案 0 :(得分:1)
基于注释中提供的信息,您可以尝试使用以下代码(它是Java代码,但是将其转换为Kotlin应该很容易):
private Observable<TvShow> getTvShow() {
return retrofitPetitionGetShow();
}
private Single<List<Season>> getSeasons(TvShow tvShow) {
return Observable.range(1, tvShow.getTotalSeasons())
.flatMap(seasonNumber -> retrofitPetitionGetSeason(seasonNumber))
.toList();
}
public Observable<TvShow> chainObservables() {
return getTvShow()
.flatMap(tvShow -> getSeasons(tvShow).map(tvShow::withSeasons).toObservable());
}
重要!
以反应/功能方式,您不应修改对象,而应创建新对象(在您的情况下,将tvShow更新为带有季节列表)。有一个tvShow::withSeasons
方法参考以这种方式实现:
public TvShow withSeasons(List<Season> seasons) {
return this.seasons == seasons ? this : new TvShow(this.name, this.totalSeasons, seasons);
}