0

在 RxScala 中如何“压缩”超过 2 个 Observable?

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

我们如何“压缩”超过 2 个 Observable?

4

3 回答 3

2

如果你有超过 3 个 observables,你也可以使用:

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)
}
于 2018-07-28T12:01:23.510 回答
1

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

val obComb = Observable.zip(ob1, ob2, ob3)
于 2017-04-28T02:12:10.560 回答
0

您可以使用zipWithwhich 让您提供“压缩”功能。

val obComb = ob1
  .zipWith(ob2)({ case (x1, x2) => (x1, x2) })
  .zipWith(ob3)({ case ((x1, x2), x3) => (x1, x2, x3) })
于 2017-04-26T11:52:59.997 回答