假设我们有 Ints 的源 Observable:
val source:Observable[Int]
我想创建另一个 Observable,产生的值与源中首次出现的值的差异大于 10:
def detect() = Observable[Int](
subscriber =>
if (!subscriber.isUnsubscribed) {
var start:Option[Int] = None
source.subscribe(
item => {
if (start.isEmpty) {
start = Option(item)
}
else {
start.filter(v => Math.abs(item - v) > 10).foreach {
item => subscriber.onNext(item)
}
}
}
)
subscriber.onCompleted()
}
)
这里我使用 var start来保存源Observable的第一个值。
有没有办法简化这段代码?我不喜欢这种为 var 赋值的方法