1

我需要获取案例类列表并将它们转换为单个逗号分隔的字符串(没有标题或尾部逗号)。

case class State(name: String)

def toLine(states: State*): String = {
}

所以, toLine(State("one"), State("two"), State("three")) 应该返回一、二、三

这就是我的想法。有更好的方法吗?

def toLine(states: State*): String = {
  states match {
    case s if s.isEmpty => throw new Exception
    case s => s.tail.foldLeft(s.head.name)(_+","+_) 
  }
}

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

4

2 回答 2

3

您可以使用mkString

def toLine(states: State*): String = states.map(_.name).mkString(",")

如果您需要确保至少一个元素,您可以执行以下操作:

def toLine(state: State, states: State*) = (state +: states).map(_.name).mkString(",")
于 2015-03-12T17:54:53.520 回答
0

Scala 的集合提供了一个函数来做到这一点:states.map(_.name).mkString(",")

如果你想确保toLine总是用至少一个值调用它,你可以这样做:

def toLine(state: State, states: State*): String = {
  states.map(_.name).mkString(",")
}

这会将检查移至类型系统,而不是在运行时进行。

于 2015-03-12T17:54:02.597 回答