将选项[String]拆分为(Option [String],Option [String])

时间:2014-04-16 10:09:17

标签: string scala

对于普通字符串,我可以这样做:

val str = "asdzxc"
val (first, second) = str.splitAt(3) // splits into ("asd", "zxc")

我希望能为Option[String]做类似的事情:

val optionalString: Option[String] = getOptionalString(...)
val (firstOption, secondOption) = ???

因此firstOptionsecondOption的类型为Option[String]。我知道我可以这样做:

optionalString.map(_.splitAt(3))

给我一​​个Option[(String, String)],但这不是我想要的。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用折叠:

optionalString.map(_.splitAt(3)).fold((None: Option[String], None: Option[String])) { case (a, b) => (Some(a), Some(b)) }

或模式匹配(可能更清楚,因为它不需要显式类型参数):

optionalString.map(_.splitAt(3)) match {
  case None => (None,None)
  case Some((a,b)) => (Some(a), Some(b))
}