如何链接可观察对象?

How to chain observables?

我需要链接两个可观察对象,第二个取决于第一个。 所以我有:

Observable 1 -> 请愿书 returns Observable

//kotlin
fun getTvShow(): Observable<TvShow> {
    return retrofitPetitionGetShow()...
}
//java
Observable<TvShow> getTvShow(){
    return retrofitPetitionGetShow()...
}

Observable 2 -> returns Single>

Observable.range(1, TvShow.totalSeasons)
            .flatMap { seasonNumber: Int ->
                retrofitPetitionGetSeason(seasonNumber)....
            }.toList()  

我需要的是将第二个可观察对象 (List) 添加到 TvShow 对象的结果 TvShow.setList(List<Season>) 然后 return 它。

提前致谢

根据评论中提供的信息,您可以尝试使用以下代码(它是 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());
}

重要!

在 reactive/functional 中,您不应修改对象,而应创建新对象(在您的情况下,有一个带有季节列表的 tvShow 更新)。有一个tvShow::withSeasons方法参考是这样实现的:

public TvShow withSeasons(List<Season> seasons) {
        return this.seasons == seasons ? this : new TvShow(this.name, this.totalSeasons, seasons);
    }