我可以使用以下代码将Option [String]转换为List [String]:
def convertOptionToListString(a: Option[String]): List[String] = {
return a.toList.flatMap(_.split(",")) // ex : ("value1", "value2", "value3", etc)
}
但是我如何将Option [String]转换为List [Int],所以最后我可以有整数列表:(1,3,5)。我的选项[String]将如下所示:一些(" 1,3,5")
请注意,值 1,3,5 来自网址发送的 params.get(" ids")和参数.get 是选项[String]
val params = request.queryString.map { case (k, v) => k -> v(0) }
由于
答案 0 :(得分:1)
如果您要将List[String]
转换为List[Int]
,跳过不可解析的值,则可以使用Try
:
import scala.util.Try
List("1", "2", "3").flatMap(x => Try(x.toInt).toOption)
res0: List[Int] = List(1, 2, 3)
List("1", "2", "abc").flatMap(x => Try(x.toInt).toOption)
res1: List[Int] = List(1, 2)
答案 1 :(得分:1)
Scala 2.13
引入了String::toIntOption
。
结合flatMap
,我们可以安全地将String
转换为Int
s并消除格式错误的输入:
List("1", "2", "abc").flatMap(_.toIntOption)
// List[Int] = List(1, 2)
答案 2 :(得分:0)
val a: Option[String] = Some("1,3,5")
val l = a.toList.flatMap(_.split(",")).map(_.toInt)
答案 3 :(得分:0)
从您所在的位置,您只需将toInt
映射到它上面即可。但是你的操作顺序有点奇怪。就像你使用toList
来满足这种类型一样。 toList
是其中一个有臭味的功能,如果你使用它,你可能会滥用它。
读得最好的逻辑是,如果你有Some
,那么处理它,否则你只是默认为空列表(我猜):
option match {
case Some(str) => str.split(",").map(_.toInt)
case None => List()
}
或者:
option.map(_.split(",").map(_.toInt)).getOrElse(List())