用分隔符将列表列表表示为字符串
Represnt List of list to string with a deliminator
我想编写自定义 toString
以将列表列表转换为带分隔符的字符串 |
trait Msg {
def toCustString(): String
}
trait Ele[T] extends Msg {
val value: T
override def toCustString(): String = s"${value}"
}
trait Grp extends Msg {
val list: Seq[Msg]
override def toCustString(): String = ""
}
case class TypeA(value: Int) extends Ele[Int]
case class TypeB(value: String) extends Ele[String]
case class TypeC(value: Float) extends Ele[Float]
case class MyGrp(list: Seq[Msg]) extends Grp
object Demo extends App {
val grp1 = MyGrp(Seq(TypeA(2)))
val grp2 = MyGrp(Seq(TypeB("ABC"), TypeC(20)))
val s=MyGrp(Seq(grp1,grp2))
print(s)
}
最终输出应该是2|ABC|20|
。请注意末尾的分隔符
任何人都可以建议如何处理上述嵌套结构的解决方案吗?
我试过以下
override def toCustString(): String = list.map(_.toCustString()).toString
在调用 mkString()
之前,您只需将 list
中的所有内容都转换为它的 CustString
表示。
trait Msg {
def toCustString: String
}
trait Ele[T] extends Msg {
val value: T
override def toCustString: String = value + "|"
}
trait Grp extends Msg {
val list: Seq[Msg]
override def toCustString: String =
list.map(_.toCustString).mkString
}
测试如下
case class TypeA(value: Int) extends Ele[Int]
case class TypeB(value: String) extends Ele[String]
case class TypeC(value: Float) extends Ele[Float]
case class MyGrp (list:Seq[Msg]) extends Grp
val grp1 = MyGrp(Seq(TypeA(2)))
val grp2 = MyGrp(Seq(TypeB("ABC"), TypeC(20)))
val s=MyGrp(Seq(grp1,grp2))
println(s.toCustString) // "2|ABC|20.0|"
我想编写自定义 toString
以将列表列表转换为带分隔符的字符串 |
trait Msg {
def toCustString(): String
}
trait Ele[T] extends Msg {
val value: T
override def toCustString(): String = s"${value}"
}
trait Grp extends Msg {
val list: Seq[Msg]
override def toCustString(): String = ""
}
case class TypeA(value: Int) extends Ele[Int]
case class TypeB(value: String) extends Ele[String]
case class TypeC(value: Float) extends Ele[Float]
case class MyGrp(list: Seq[Msg]) extends Grp
object Demo extends App {
val grp1 = MyGrp(Seq(TypeA(2)))
val grp2 = MyGrp(Seq(TypeB("ABC"), TypeC(20)))
val s=MyGrp(Seq(grp1,grp2))
print(s)
}
最终输出应该是2|ABC|20|
。请注意末尾的分隔符
任何人都可以建议如何处理上述嵌套结构的解决方案吗?
我试过以下
override def toCustString(): String = list.map(_.toCustString()).toString
在调用 mkString()
之前,您只需将 list
中的所有内容都转换为它的 CustString
表示。
trait Msg {
def toCustString: String
}
trait Ele[T] extends Msg {
val value: T
override def toCustString: String = value + "|"
}
trait Grp extends Msg {
val list: Seq[Msg]
override def toCustString: String =
list.map(_.toCustString).mkString
}
测试如下
case class TypeA(value: Int) extends Ele[Int]
case class TypeB(value: String) extends Ele[String]
case class TypeC(value: Float) extends Ele[Float]
case class MyGrp (list:Seq[Msg]) extends Grp
val grp1 = MyGrp(Seq(TypeA(2)))
val grp2 = MyGrp(Seq(TypeB("ABC"), TypeC(20)))
val s=MyGrp(Seq(grp1,grp2))
println(s.toCustString) // "2|ABC|20.0|"