Scala字符串列表选项[String]与mkString一起使用
我有一个列表,可以有一个字符串或选项[String] 像这样Scala字符串列表选项[String]与mkString一起使用,scala,Scala,我有一个列表,可以有一个字符串或选项[String] 像这样 val a = List("duck","dog","cat") a.mkString(:) duck:dog:cat val b = List(Some("duck"), "dog", None) 我的输出应该是 “鸭子:狗” 我怎样才能做到这一点,我得到一些关于这个的信息: scala> a.map{ x => | x match { | case x:String => x
val a = List("duck","dog","cat")
a.mkString(:)
duck:dog:cat
val b = List(Some("duck"), "dog", None)
我的输出应该是
“鸭子:狗”
我怎样才能做到这一点,我得到一些关于这个的信息:
scala> a.map{ x =>
| x match {
| case x:String => x
| case Some(x:String) => x
| case None => null}}
List[String] = List(duck, dog, null)
scala> res.filter(_!=null).mkString(":")
res24: String = duck:dog
有更好的方法吗?您可以
flatMap
来摆脱过滤器
:
b.flatMap {
case x: String => List(x)
case Some(x) => List(x)
case None => List()
}.mkString(":")
或者您可以在映射之前过滤:
b.filter(_ != None).map {
case x: String => x
case Some(x) => x
}.mkString(":")
您可以flatMap
来摆脱过滤器
:
b.flatMap {
case x: String => List(x)
case Some(x) => List(x)
case None => List()
}.mkString(":")
或者您可以在映射之前过滤:
b.filter(_ != None).map {
case x: String => x
case Some(x) => x
}.mkString(":")
这是一个使用收集的完美示例。
我们想创建一个只包含部分元素的列表,然后我们想使用mkString
:
val b = List(Some("duck"), "dog", None)
val result: List[String] = b collect {
case x: String => x
case Some(x: String) => x
}
result.mkString(":")
这是一个使用收集的完美示例。
我们想创建一个只包含部分元素的列表,然后我们想使用mkString
:
val b = List(Some("duck"), "dog", None)
val result: List[String] = b collect {
case x: String => x
case Some(x: String) => x
}
result.mkString(":")
这是一个适用于null
scala> val l = List(Some("duck"), "dog", None, null)
l: List[java.io.Serializable] = List(Some(duck), dog, None, null)
scala> l.map{a => a match {
| case null => ""
| case Some(a) => Some(a).get.toString
| case None => ""
| case _ => a.toString}}.filter(_.length > 0).mkString(":")
res7: String = duck:dog
这是一个适用于null
scala> val l = List(Some("duck"), "dog", None, null)
l: List[java.io.Serializable] = List(Some(duck), dog, None, null)
scala> l.map{a => a match {
| case null => ""
| case Some(a) => Some(a).get.toString
| case None => ""
| case _ => a.toString}}.filter(_.length > 0).mkString(":")
res7: String = duck:dog
理想情况下,如果给你一个列表[Any]
,你会修复任何问题。你能用null
代替None
吗?理想情况下,如果给你一个列表[Any]
,你会修复任何问题。你能用null
代替None
吗?