Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让mkString在scala中跳过null?_Scala - Fatal编程技术网

如何让mkString在scala中跳过null?

如何让mkString在scala中跳过null?,scala,Scala,但我只想得到“abc” 有没有一种scala方法可以跳过空值?总是有Seq(“abc”,空)。filter(!=null)。mkString(“”结合了Rex的答案和Eric的第一条评论: scala> Seq("abc", null).mkString(" ") res0: String = abc null 第一个映射将值包装成Seq[Option[String]]收集然后本质上做一个过滤器和映射,丢弃无值,只留下未包装的一些值。就像老笑话说的那样,“医生,医生,我这样做会疼的。”“

但我只想得到“abc”


有没有一种scala方法可以跳过空值?

总是有
Seq(“abc”,空)。filter(!=null)。mkString(“”
结合了Rex的答案和Eric的第一条评论:

scala> Seq("abc", null).mkString(" ")
res0: String = abc null

第一个
映射
将值包装成
Seq[Option[String]]
收集
然后本质上做一个
过滤器
映射
,丢弃
值,只留下未包装的
一些
值。

就像老笑话说的那样,“医生,医生,我这样做会疼的。”“所以,不要那样做。”使用
选项[String]
作为你的类型,和
None
而不是
null
。我很想这样做,但是这些null来自Java代码。这样更好吗:Seq(Option(“abc”)、Option(null)).flatMap(s=>s).mkString(“”)?这样试试,然后通过过滤,然后通过更改Java代码。查看哪一个在保持正确的情况下更快。@NSF,
flatMap(s=>s)
可以更简洁地写成
flatten
Seq(“abc”,null).flatMap(Option())).mkString(“”
)。Flatte按您的要求进行操作。
Seq(“abc”,null).iterator.filter(!=null).mkString(“”)
,以避免生成中间集合。@KevinWright Scala的当前版本有
with filter
,不是吗?更新:刚刚尝试过-显然
mkString
不能直接与
withFilter
+1一起使用
flatMap
方法。这就是我对惯用Scala的期望。知道Option(null)可靠地返回“None”也很好
Seq("abc", null).map(Option(_)).collect{case Some(x) => x}.mkString(" ")
scala> val seq = Seq("abc", null, "def")
seq: Seq[String] = List(abc, null, def)

scala> seq.flatMap(Option[String]).mkString(" ")
res0: String = abc def