簡體   English   中英

RxScala“壓縮”多個可觀察對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM