Как объединить значения списка в строку - PullRequest
0 голосов
/ 07 июля 2019

У меня есть такой класс дел:

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 ]

2 голосов
/ 07 июля 2019

Комбинация map и mkString должна добиться цели:

l.map(mc => mc.name + "_" + mc.values.mkString("-")).mkString("_")
1 голос
/ 07 июля 2019

Вы можете накопить шаблон, который 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("-")
}

// output - https://scastie.scala -lang.org / praagagupd / 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
0 голосов
/ 07 июля 2019

Попробуйте

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 для каждого элемента коллекции, а затем объединяет их с указанным разделителем "-".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...