如何将列表值组合成字符串

时间:2019-07-07 18:29:53

标签: scala

我有一个这样的案例类:

case class MyClass(name: String, values: Seq[String])

如果我创建这样的字符串列表:

scala> l
res19: List[MyClass] = List(MyClass(firstvar,List(one,two,three)), MyClass(secondvar,List(23423, 234234)))

如何将以上内容转换为这样的字符串:

"firstvar_one-two-three_secondvar_23423-234234"

3 个答案:

答案 0 :(得分:2)

结合使用mapmkString可以达到目的:

l.map(mc => mc.name + "_" + mc.values.mkString("-")).mkString("_")

答案 1 :(得分:1)

您可以累加foldLeft

的模式
final case class MyClass(name: String, values: Seq[String])

val data = List(MyClass("firstvar", List("one", "two", "three")),
                MyClass("secondvar", List("23423", "234234")))

val res = data.zipWithIndex.foldLeft("") {
  case (acc, (elem, 0)) => 
    acc + elem.name + "_" + elem.values.mkString("-")
  case (acc, (elem, _)) =>
    acc + "_" + elem.name + "_" + elem.values.mkString("-")
}

//输出-https://scastie.scala-lang.org/prayagupd/M48HqDp9SMqbCy1Q083Q8g/4

firstvar_one-two-three_secondvar_23423-234234

或者仅将.map.mkString一起使用。

scala> data.map { elem => elem.name + "_" + elem.values.mkString("-") }.mkString("_")
res5: String = firstvar_one-two-three_secondvar_23423-234234

答案 2 :(得分:0)

尝试

l.map { myClass =>
  s"${myClass.name}_${myClass.values.mkString("-")}"
}.mkString("_")

输出

res0: String = firstvar_one-two-three_secondvar_23423-234234

请注意mkString的工作方式

List("one","two","three").mkString("-")

输出

one-two-three

在集合的每个元素上调用toString,然后将它们与指定的分隔符"-"连接起来。