Scala 如何将案例类序列化为以制表符分隔的文本文件?

Scala 如何将案例类序列化为以制表符分隔的文本文件?,scala,data-structures,file-io,Scala,Data Structures,File Io,我有一个包含相同类型的案例类的列表,我正在寻找将其持久化为以制表符分隔的文本文件的最佳实践 case class mycase1 (x: Int, y:Int , name:String) val item1 = new mycase1(1,2,"item1") val item2 = new mycase1(3,4,"item2") val item3 = new mycase1(5,6,"item3") val myList = List (item1,item2,item3) 将上

我有一个包含相同类型的案例类的列表,我正在寻找将其持久化为以制表符分隔的文本文件的最佳实践

case class mycase1 (x: Int, y:Int , name:String)  
val item1 = new mycase1(1,2,"item1")
val item2 = new mycase1(3,4,"item2")
val item3 = new mycase1(5,6,"item3")

val myList = List (item1,item2,item3)
将上述数据结构写入文件的最佳方式是什么?有没有这样一件事:

myList.toFile(delimiter="\t")

因为case类是
产品
,所以您可以简单地使用
productIterator
方法以迭代器中定义的顺序获取字段。您可以使用它将
mycase1的列表映射到
字符串的列表,然后使用它写入文件。简化的示例如下所示:

  case class mycase1 (x: Int, y:Int , name:String)  
  val item1 = new mycase1(1,2,"item1")
  val item2 = new mycase1(3,4,"item2")
  val item3 = new mycase1(5,6,"item3")

  val myList = List (item1,item2,item3)

  val out = new PrintWriter(new FileWriter(pathToMyFile))
  try{
    myList.map(_.productIterator.mkString("\t")) foreach (out.println(_))      
  }
  finally{
    out.close
  }

唯一需要注意的是,字段的输出顺序确实是在case类构造函数中定义的(从左到右)。如果你想用另一种方法,我的解决方案将不起作用。

你不需要先转换列表中的元素,然后再打印它们,你可以同时这样做:
myList.foreach{e=>out.println(e.productIterator.mkString(“\t”)}
当然可以,但答案中提供的方法称为“延迟副作用”,这样,副作用(打印出来)会在以后发生(换句话说,将无副作用的代码放入
map
中,并使用
foreach
仅用于副作用)作为Scala提示,无需使用“new”关键字来创建案例类的实例。我的案例1(1,2,“项目1”)就足够了