scala 将 List(Some()) 转换为 List(string)

scala convert List(Some()) to List(string)

如何将某些类型的 Scala 列表转换为字符串列表 例如:

List(Some(1234), Some(2345), Some(45678))
to  List("1234","2345","45678")
List(Some(1234), Some(2345), Some(45678)).flatten.map(_.toString)

你可以这样做:

scala> List(Some(1234), Some(2345), Some(45678)).flatten.map(x => x.toString)

res11: List[String] = List(1234, 2345, 45678)

映射和匹配:

li.map {case Some (x) => Some (s"$x")}
res103: List[Some[String]] = List(Some(1234), Some(2345), Some(45678))

正如已经建议的那样,您可以 flatten 集合,然后 map toString 方法对其项目进行处理,但是您可以通过使用 collect:

val in = List(Some(1234), Some(2345), Some(45678))
val out = in.collect { case Some(x) => x.toString }

collect 方法采用偏函数(用 case 定义以解构 Option)并将其仅应用于定义了偏函数的项目(在这种情况下,只有 Somes 而不是 Nones).

您可以阅读更多关于 collect on the official documentation

您可以 运行 一个示例并使用它 here on Scastie

val str: List[String]= List(Some(123), 
Some(456), Some(789), None,
Some(234)).flatten.map(_.toString)
println(str) // will print List(123,456,789,234) 

实际上展平将忽略所有 None 并取一些我们正在映射到字符串的内容。