如何在scala中连接选项

Mon*_*key 5 scala

什么是scala中优雅/正确的方式来串联连接一个Option,以便None呈现为空字符串,并且具有值的变量不会包含在Some("xyz")中

case class foo(bar: Option[String], bun: Option[String])
println(myFoo.bar+ "," + myFoo.bun)
Run Code Online (Sandbox Code Playgroud)

我想要的输出就是例如

hello,
Run Code Online (Sandbox Code Playgroud)

代替

Some(hello),None

My *_*adr 10

一种方法是:

val a = foo(Some("Hello"), None) 
a.productIterator.collect{ case Some(s) => s }.mkString(",")
Run Code Online (Sandbox Code Playgroud)

另一种方式是:

Seq(bar, bun).flatten.mkString(",")
Run Code Online (Sandbox Code Playgroud)

这不符合您的要求,因为它不会在最后打印逗号,但我仍然建议它,因为它可能会做你想要的.


4le*_*x1v 6

要得到一个值Option以安全的方式使用getOrElse,并提供一个默认的参数,它会在你的情况下使用OptionNone.在您的示例中,它看起来像这样:

case class foo(bar: Option[String], bun: Option[String])
println(myFoo.bar.getOrElse("") + "," + myFoo.bun.getOrElse(""))
Run Code Online (Sandbox Code Playgroud)

然后你会得到所需的结果