2

如何以 Scala 方式执行此操作:将第一个元素返回为Some[String]from Option[Seq[String]],如果它是Some[Seq[String]]并且至少有一个字符串,否则返回None

4

2 回答 2

7

headOption在 上做你想做的事Seq,剩下flatMap的可以做:Option

def first[A](maybe: Option[Seq[A]]): Option[A] = maybe.flatMap(_.headOption)

这与以下内容基本相同,但更简洁和惯用:

def first[A](maybe: Option[Seq[A]]): Option[A] = maybe match {
  case Some(xs) => xs.headOption
  case None => None
}

请注意,这两个版本都比您要求的更通用,但是如果您只希望它与字符串一起使用A,您可以删除类型参数并替换为。String

于 2013-08-29T01:23:28.437 回答
0
def getHead(strings: Option[Seq[String]]): Option[String] = {
  strings.collectFirst {
      case seq if seq.nonEmpty => seq.head
    }
}
于 2020-04-03T19:27:30.590 回答