如何从另一个生成一个Observable

时间:2016-08-26 18:48:04

标签: scala rx-java rx-scala

让我们说我们有来源的Observable:

this

我想创建另一个Observable,生成的值与 source 中第一个出现的值的差值大于10:

val source:Observable[Int]

我在这里使用var start 来保存 source Observable的第一个值。

有没有办法简化这段代码?我不喜欢这种方法,为var

赋值

2 个答案:

答案 0 :(得分:3)

以下是我提出的建议:

import rx.lang.scala.Observable

val source = Observable.from(List(5, 2, 3, 16, -40, 2, -70, 50))

source.scan(Option.empty[(Int, Int)]) { (acc, next) =>
  acc.map(_.copy(_2 = next)) orElse Some((next, next))
}.collect {
  case Some((start, current)) if math.abs(start - current) > 10 => current
}.subscribe(x => println(x))

打印

16
-40
-70
50

基本上扫描会保留一个可以未初始化(None)的累加器,或者可以保持一对:第一个值和从源发出的最后一个元素。然后我们只收集那些符合你的谓词的元素。

答案 1 :(得分:0)

您只需要应用read运算符,该运算符生成一个新的Observable,它反映了源可观察量的排放,但跳过谓词测试为false的那些:

filter