我有一些Seq[Strings]
,需要转换为Option[Seq[Long]]
。我正在使用以下内容:
val idsAsLongsUDF: Seq[String] => Option[Seq[Long]] = {
idsSeqStr: Seq[String] =>
import scala.util.Try
Try(idsSeqStr.flatMap(id => Try(id.toLong).toOption)).toOption match {
case Some(List()) => None: Option[Seq[Long]]
case x => x
}
}
捕获是,一个空列表返回为某些(list()),而不是没有 - 是正确但不需要的。因此,最后几行修复了空列表问题,当找到空列表时返回None
。
我想获得此试验数据建议的Option[List[Long]]
返回:
val s = Seq("abc", null) // None
val n : Seq[String] = null // None
val l = Seq("a", "1", "2") // Some(List(1,2))
有比我写的更优雅或高效的手段吗?
可能有多种剥皮的方法,而优雅在情人眼中,但这是我写的方式:
val idsAsLongsUDF: Seq[String] => Option[Seq[Long]] = { idsSeqStr =>
import scala.util.Try
Option(idsSeqStr)
.map(_.flatMap(id => Try(id.toLong).toOption))
.filterNot(_.isEmpty)
}