我有一个方法应该将列表转换Option为一个对象,或者None如果列表为空.
def listToOption(myList: List[Foo]): Option[Bar] = {
if(myList.nonEmpty) Some(Bar(myList))
else None
}
case class Bar(fooList: List[Foo]) {}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我的解决方案感觉相当不优雅,而不是Scala方式.看来我应该可以使用一种方法List来做这种事情,但我无法绕过它.
是否有更像Scala的方式来做到这一点?
Ale*_*nov 22
Lee的答案很好,但我认为这更符合意图:
Option(myList).filter(_.nonEmpty).map(Bar)
Run Code Online (Sandbox Code Playgroud)
开始Scala 2.13,Option有一个when建设者:
Option.when(condition)(result)
Run Code Online (Sandbox Code Playgroud)
在我们的案例中,它给出:
Option.when(myList.nonEmpty)(Bar(myList))
// val myList = List[Int]() => Option[Bar] = None
// val myList = List(1, 2) => Option[Bar] = Some(Bar(List(1, 2)))
Run Code Online (Sandbox Code Playgroud)
另请注意Option.unless会引起相反情况的因素:
Option.unless(myList.isEmpty)(Bar(myList))
// val myList = List[Int]() => Option[Bar] = None
// val myList = List(1, 2) => Option[Bar] = Some(Bar(List(1, 2)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5212 次 |
| 最近记录: |