[英]RxScala “zip” multiple Observables
在RxScala中,如何“壓縮”兩個以上的Observables?
val ob1: Observable[Int] = Observable.from(Future(10))
val ob2: Observable[Int] = Observable.from(Future(20))
val ob3: Observable[Int] = Observable.from(Future(30))
“ zip”與2個Observable完美搭配
val obComb: Observable[(Int, Int, Int)] = ob1 zip ob2
我們如何“壓縮”兩個以上的Observables?
如果您有3個以上的可觀察物,則還可以使用:
val allObs = Observable.from(List(ob1, ob2, ob3))
val zipObs = Observable.zip(allObs)
如果您不喜歡靜態方式,也可以嘗試:
val zipObs = ob1 zip ob2 zip ob3 map {
case ((a, b), c) => (a, b, c)
}
由於不能將壓縮兩個以上的Observable很好地定義為實例方法,因此在伴隨對象中將其定義為“靜態”方法。 也就是說,要壓縮三個Observable,您可以編寫
val obComb = Observable.zip(ob1, ob2, ob3)
您可以使用zipWith
來提供“壓縮”功能。
val obComb = ob1
.zipWith(ob2)({ case (x1, x2) => (x1, x2) })
.zipWith(ob3)({ case ((x1, x2), x3) => (x1, x2, x3) })
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.