我需要获取一个case类列表并将它们转换为一个逗号分隔的字符串(没有标题或尾随逗号)。
case class State(name: String)
def toLine(states: State*): String = {
}
所以,toLine(州(“一”),州(“二”),州(“三”))应该返回一,二,三
这就是我的想法。有更好的方法吗?
def toLine(states: State*): String = {
states match {
case s if s.isEmpty => throw new Exception
case s => s.tail.foldLeft(s.head.name)(_+","+_)
}
}
有没有办法保证列表中至少有一个值?
答案 0 :(得分:3)
您可以使用mkString
:
def toLine(states: State*): String = states.map(_.name).mkString(",")
如果您需要确保至少有一个元素可以执行:
def toLine(state: State, states: State*) = (state +: states).map(_.name).mkString(",")
答案 1 :(得分:0)
Scala的集合提供了执行此操作的功能:states.map(_.name).mkString(",")
如果您想确保始终使用至少一个值调用toLine
,则可以执行以下操作:
def toLine(state: State, states: State*): String = {
states.map(_.name).mkString(",")
}
这会将检查移到类型系统,而不是在运行时这样做。