Ints のソース Observable があるとします。
val source:Observable[Int]
ソースで最初に表示された値との差が 10 より大きい値を生成する、別の Observable を作成したいと思います。
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()
}
)
ここでは、ソースObservableの最初の値を保持するためにvar startを使用しました。
このコードを単純化する方法はありますか? 変数に値を代入するこのアプローチは好きではありません