将类列表折叠为单个逗号分隔的字符串(在Scala中)

时间:2015-03-12 17:49:15

标签: scala foldleft

我需要获取一个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)(_+","+_) 
  }
}

有没有办法保证列表中至少有一个值?

2 个答案:

答案 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(",")
}

这会将检查移到类型系统,而不是在运行时这样做。