使用选项[list [long]]时,用无用替换空列表



我有一些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)
}

最新更新