如何链接可观察对象?
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);
}
我需要链接两个可观察对象,第二个取决于第一个。 所以我有:
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()
我需要的是将第二个可观察对象 (ListTvShow.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);
}