Чтобы решить эту проблему, я бы определил метод как ниже , если у меня нет контроля над размерами списков :
def zipNestedLists[A](lists: List[List[A]]): List[List[Any]] = lists match {
case Nil => Nil
case Nil :: _ => Nil
case _ => lists.map(_.head) :: zipNestedLists(lists.map(_.tail))
}
, если я уверен, что все спискиимеют такой же размер, тогда в этом случае я бы использовал transpose
:
scala> List(List(a1,a2,a3,a4), List(b1,b2,b3,b4), List(c1,c2,c3,c4)).transpose
List(List(a1,b1,c1),List(a2,b2,c2),List(a3,b3,c3),List(a4,b4,c4))
, пожалуйста, посмотрите https://www.scala -lang.org / api / current / scala / collection / immutable / List. html # transpose для получения дополнительной информации о transpose
.
Затем создайте заголовок:
val header: String = map.keySet.mkString(",")
После этого тело:
val body = zipNestedLists(map.values.toList)
затемвывод в файл (спасибо @jrook)
val file = new File("path")
val pw = new PrintWriter(new FileWriter(file))
pw.println(header)
body.foreach(v => pw.println(v.mkString(",")))
pw.close()
Обратите внимание, что метод zipNestedLists
не будет работать для пустых списков. Отфильтруйте непустые списки перед вызовом.