如何在Scala中将Option [String]转换为List [Int]

时间:2016-04-05 20:45:39

标签: scala option

我可以使用以下代码将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) }

由于

4 个答案:

答案 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())