我有一个这样的案例类:
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"
答案 0 :(得分:2)
结合使用map
和mkString
可以达到目的:
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
,然后将它们与指定的分隔符"-"
连接起来。