我是Scala的新手,我试图以制表符分隔的格式获取“ Lr”类型的所有属性值。但是,每当我在下面执行“ Echo”时,程序都将返回:
Some(something1) Some(something2)
我希望:
something1 something2
关于如何修改代码以获取期望格式的任何线索吗?
package com.......
case class Lr (
some1_ID : Option[String],
some2_ID : Option[String]
)
{
def getData(): String =
{
return productIterator.mkString("\t")
}
}
object Echo {
def main( args:Array[String] ):Unit =
{
val testLR = Lr(Option("something1"),Option("something2"))
print(testLR.getData())
}
}
答案 0 :(得分:6)
这取决于您要在某些属性为“无”的情况下要做什么。
如果您要放弃“无”
case class Lr (some1_ID : Option[String], some2_ID : Option[String]) {
def getData: String = {
Seq(some1_ID, some2_ID).flatten.mkString("\t")
}
}
如果要使用其他值
case class Lr(some1_ID : Option[String], some2_ID : Option[String]) {
def getData: String = {
Seq(some1_ID, some2_ID).map(_.getOrElse("XXX")).mkString("\t")
}
}
如果要使用productIterator,它是一个Iterator [Any],因此您需要模式匹配才能使用Options。
case class Lr(some1_ID : Option[String], some2_ID : Option[String]) {
def getData: String = {
productIterator.collect {
case Some(value) => value
// case None => "ALTERNATIVE VALUE"
// case others => others (non Option fields)
}.mkString("\t")
}
}
答案 1 :(得分:1)
您要为None
打印什么?确定之后,您可以执行类似的操作
def getData: String =
Seq(
some1_ID.getOrElse("-"),
some2_ID.getOrElse("-")
).mkString("\t")