在Scala中从CSV生成案例类

时间:2012-04-14 16:27:28

标签: scala pointfree

我从服务获得了CSV响应,我想生成一个案例类列表。例如:

case class MyCaseClass(e1: String, e2: String, e3: String)

val body = getLargeCsvFromServiceOrSomething()
val elements = body.split(",")

现在我有一个Array[String]。我想把这个大数组分解成3个元素的chuck,所以我可以生成我的List[MyCaseClass],其中每个实例从数组中取出3个元素。有没有类似于splitAt的方法,但是每个n个元素都会吐出来?我确信我能做到这一点,但它不会来找我。

1 个答案:

答案 0 :(得分:4)

你想要的是grouped

scala> List(1,2,3,4,5,6,7).grouped(3).toList
res0: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6), List(7))

所以你的事情可能就像:

val elements = Array("a","b","c","d","e","f")
val classes = elements.grouped(3).map{ case Array(a,b,c) => MyCaseClass(a,b,c) }    
println(classes.toList) // List(MyCaseClass(a,b,c), MyCaseClass(d,e,f))