如何在 Scala 中将 Option[String] 转换为 List [Int]
How to convert an Option[String]to List [Int]in Scala
我可以使用以下代码将 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)。我的 Option[String] 看起来像这样: Some("1,3,5")
请注意,值 1,3,5 来自 params.get("ids") 发送自url 和 params.get 是 Option[String]
val params = request.queryString.map { case (k, v) => k -> v(0) }
谢谢
如果要将 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)
val a: Option[String] = Some("1,3,5")
val l = a.toList.flatMap(_.split(",")).map(_.toInt)
从你所在的地方,你只需要在它上面映射 toInt
。但是你的操作顺序有点奇怪。这就像你使用 toList
只是为了满足类型。 toList
是那些臭味函数之一,如果你在使用它,你可能在滥用某些东西。
读取最好的逻辑是,如果你有一个Some
,然后处理它,否则你只是默认为空列表(我猜):
option match {
case Some(str) => str.split(",").map(_.toInt)
case None => List()
}
或:
option.map(_.split(",").map(_.toInt)).getOrElse(List())
Scala 2.13
介绍了String::toIntOption
。
结合 flatMap
,我们可以安全地将 String
转换为 Int
并消除格式错误的输入:
List("1", "2", "abc").flatMap(_.toIntOption)
// List[Int] = List(1, 2)
我可以使用以下代码将 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)。我的 Option[String] 看起来像这样: Some("1,3,5")
请注意,值 1,3,5 来自 params.get("ids") 发送自url 和 params.get 是 Option[String]
val params = request.queryString.map { case (k, v) => k -> v(0) }
谢谢
如果要将 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)
val a: Option[String] = Some("1,3,5")
val l = a.toList.flatMap(_.split(",")).map(_.toInt)
从你所在的地方,你只需要在它上面映射 toInt
。但是你的操作顺序有点奇怪。这就像你使用 toList
只是为了满足类型。 toList
是那些臭味函数之一,如果你在使用它,你可能在滥用某些东西。
读取最好的逻辑是,如果你有一个Some
,然后处理它,否则你只是默认为空列表(我猜):
option match {
case Some(str) => str.split(",").map(_.toInt)
case None => List()
}
或:
option.map(_.split(",").map(_.toInt)).getOrElse(List())
Scala 2.13
介绍了String::toIntOption
。
结合 flatMap
,我们可以安全地将 String
转换为 Int
并消除格式错误的输入:
List("1", "2", "abc").flatMap(_.toIntOption)
// List[Int] = List(1, 2)