2012-04-14 5 views
1

サービスからCSV応答があり、ケースクラスのリストを生成したい。例:スカラのCSVからケースクラスを生成する

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

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

私はArray[String]を持っています。私はその大きな配列を3要素チャックに分解したいので、私はList[MyCaseClass]を生成することができます。各インスタンスは配列から3要素を取ります。 splitAtと似たメソッドがありますが、n個の要素ごとに吐き出されますか?私はこのポイントフリーを行うことができると確信していますが、それは私に来ていないだけです。

+0

ライン。最初に改行で分割し、その行をcaseクラスのインスタンスにマップする方が頑強だと思います。 – ziggystar

+0

ええ、私はまさにそれをしました。 – andyczerwonka

答えて

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)) 

だからあなたの事はようであるかもしれない:それはCSVだ場合、あなたは、改行してからにつきおそらく三つの要素で区切られた行を持つべきである

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)) 
+0

これは、私が探していた方法です。私はそれが容易であることを知っていた。ありがとう。 – andyczerwonka

関連する問題