您可以使用 ObservableB 和 ObservableC 的 zip 对您的 ObservableA 进行平面映射。
假设这是您的 ObservableA、ObservableB 和 ObservableC。
(Kotlin 中的示例代码)
fun getObservableA(): Observable<Int> {
return Observable.just(1, 2, 3)
}
fun getObservableB(num: Int): Observable<String> {
return Observable.just("${num}A", "${num}B")
}
fun getObservableC(num: Int): Observable<String> {
return Observable.just("${num}a", "${num}b", "${num}c")
}
您首先调用getObservableA() 并将其结果平面映射到getObservableB(num) 和getObservableC(num) 的压缩包。
getObservableA()
.flatMap { num ->
Observable.zip(
getObservableB(num),
getObservableC(num),
BiFunction { t1: String, t2: String -> t1 to t2 }
)
}
.subscribe(
{ (t1, t2) ->
// This will emit 6 times as follows:-
// t1 = 1A, t2 = 1a
// t1 = 1B, t2 = tb
// t1 = 2A, t2 = 2a
// t1 = 2B, t2 = 2b
// t1 = 3A, t2 = 3a
// t1 = 3B, t2 = 3b
}
)