RxScala" zip"多个Observable

时间:2017-04-26 11:41:08

标签: scala reactivex rx-scala

在RxScala中如何" zip"超过2个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))

"拉链"与2 Observables完美配合

val obComb: Observable[(Int, Int, Int)] = ob1 zip ob2

我们如何" zip"超过2个Observables?

3 个答案:

答案 0 :(得分:2)

如果您有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)
}

答案 1 :(得分:1)

由于压缩两个以上的Observable不能“很好地”定义为实例方法,因此它被定义为伴随对象中的“静态”方法。也就是说,要压缩三个Observable,你可以写

val obComb = Observable.zip(ob1, ob2, ob3)

答案 2 :(得分:0)

您可以使用zipWith来提供“压缩”功能。

val obComb = ob1
  .zipWith(ob2)({ case (x1, x2) => (x1, x2) })
  .zipWith(ob3)({ case ((x1, x2), x3) => (x1, x2, x3) })