pic*_*ter 4 scala for-comprehension
我对for理解和flatMap选项非常熟悉.
所以我知道你可以做点什么
val a: Option[_] = for {
foo <- Some(x)
bar <- Some(y)
baz <- Some(z)
} yield baz
Run Code Online (Sandbox Code Playgroud)
Some(z)如果在理解中没有任何内容None,那就给了我,因为它flatMap在每个语句中都做了.
但实际上我正在寻找其他方面的东西.我想穿越到for理解,只要一切None,就像是orElse在for理解.
例如:
val b: Option[_] = for {
foo <- None
bar <- Some(x)
baz <- None
} yield *return the one with some*
Run Code Online (Sandbox Code Playgroud)
有这样的东西,或者最好的方法是什么?
提前致谢!
小智 7
reduce当它找到a时不会短路Some(即即使第一个元素是a,千元素列表也会进行一千次比较Some).find(_.isDefined)+ flatten将停止并返回Some它找到的第一个.以下仅进行2次比较(而不是5次).
val xs: List[Option[Int]] = List(None, Some(1), None, Some(2), None, Some(3))
xs.find(_.isDefined).flatten
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
680 次 |
| 最近记录: |