如果选项包含无或包含不需要的类型,则以惯用方式返回无

Ken*_*Ken 1 scala

我想读一个可能为空的列表的头部,如果那个头包含一个特定的模式,我将返回Some(),在所有其他情况下,我想返回None.

这是我的工作代码,但是对于嵌套匹配并且在解开它之后将对象重新包装在Some()中它有点难看.

 list.headOption match{
  case None => None
  case Some(csvString) => csvString.split(',') match {
    case Array(a, b, c) => Some(Array(a, b, c))
    case _ => None
  }
}
Run Code Online (Sandbox Code Playgroud)

是否有更好,更惯用的方法来实现这一目标?

Gab*_*lla 5

使用map,collect你可以做到

list.headOption.map(_.split(',')).collect {
  case values @ Array(a, b, c) => values
}
Run Code Online (Sandbox Code Playgroud)