如何在Scala中优化此方法?

时间:2017-12-05 11:22:51

标签: scala sequence option

假设我使用方法A获得了课程foo

class A(x: Int) { def foo(): Option[Int] = if (x > 0) Some(x) else None }

现在我正在写这样的函数bar

def bar(as: List[A]): Option[(A,  Int)] = for {
  a <- as.view.find(_.foo.nonEmpty)
  foo <- a.foo
} yield (a, foo)

上面的代码工作正常,但它为找到的foo实例调用了A方法两次。如何为找到的bar实例重新编写foo仅为一次调用方法A

2 个答案:

答案 0 :(得分:1)

 as.iterator.flatMap { a => a.foo.map { a -> _ } }.find(_ => true)

答案 1 :(得分:1)

使用流。流中的元素被懒惰地评估。

window.location = '<url>'
window.location.href = '<url>'
window.location.assign('<url>')