Scala-如何将文件中的数据映射为不同的格式?

时间:2018-07-16 08:56:15

标签: scala collections stream

我正在学习Scala基础知识,并编写了一个代码来从csv文件中读取数据并以逗号分隔。现在,我正在尝试解析数据,以便获得类似Map [Double,String]

的地图。

所以我决定将其放入Map[Double, String],因为我的文件包含两个字段(saleId(双精度)和saleType(字符串))。但是我遇到了一个错误(Map [Nothing,Nothing]类型的表达式与预期的Map [Double,String]类型不一致)。

我这里的错误是什么?我认为使用line(0).toDouble, line(1).toString进行映射会导致预期的Map [Double,String]

val stream : InputStream = getClass.getResourceAsStream("/sales.csv")
  val lines: Iterator[String] = scala.io.Source.fromInputStream(stream).getLines
  val map: Map[Double, String] = lines
    .map(_.split(",")
    .map(line => (line(0).toDouble, line(1).toString)))
    .toMap

2 个答案:

答案 0 :(得分:2)

您的括号略有错误,应该是这样:

val map: Map[Double, String] = lines
  .map(_.split(",")) // <- Added bracket
  .map(line => (line(0).toDouble, line(1).toString)) // <- Removed bracket
  .toMap

答案 1 :(得分:0)

假设您输入的格式为

val input = List("1.0,a","2.0,b","3.0,c","4.0,d")

然后编写函数

input.map(x => (x.split(",")(0).toDouble,x.split(",")(1) )).toMap

将以

的形式提供输出
scala.collection.immutable.Map[Double,String] = Map(1.0 -> a, 2.0 -> b, 3.0 -> c, 4.0 -> d)