2

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を使用しました。

このコードを単純化する方法はありますか? 変数に値を代入するこのアプローチは好きではありません

4

2 に答える 2

0

演算子を適用するだけfilterで、ソース オブザーバブルの放出を反映する新しい Observable が生成されますが、述語が false をテストするものはスキップされます。

val filtered = source.filter(v => Math.abs(item - v) > 10)
于 2016-08-26T19:30:57.757 に答える