在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?
答案 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) })