Sou*_*nta 5 csv macros scala case-class
是否有一种将案例类转换为CSV值的优雅方法.
例如 -
case class Person( name : String, age : Int, gender: String, address : Option[String])
Run Code Online (Sandbox Code Playgroud)
我在考虑使用宏,但想知道是否还有其他选择.
注意:案例类不包含任何用户定义的字段.
Jus*_*ony 12
如何implicits与productIterator?
implicit class CSVWrapper(val prod: Product) extends AnyVal {
def toCSV() = prod.productIterator.map{
case Some(value) => value
case None => ""
case rest => rest
}.mkString(",")
}
Person("name", 30, "male", None).toCSV()
Run Code Online (Sandbox Code Playgroud)
是的,在Scala中,有一种方法可以将case类转换为CSV而根本不添加样板.例如PureCSV的基础上,惊人的无形库,可以做到这一点:
scala> import purecsv.safe._
scala> case class Interval(start: Long, end: Long)
scala> Interval(10,20).toCSV()
res1: String = 1,10
scala> Seq(Interval(1,10),Interval(11,20)).toCSV("|")
res2: String =
1|10
11|20
Run Code Online (Sandbox Code Playgroud)
注意:我是PureCSV的作者.