【问题标题】:Scala - how to map data from a file into different formats?Scala - 如何将文件中的数据映射为不同的格式?
【发布时间】:2018-07-16 08:56:15
【问题描述】:

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

所以我决定将其放入Map[Double, String],因为我的文件包含两个字段(saleId (Double) 和 saleType (String))。但是我收到一个错误(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

【问题讨论】:

    标签: scala collections stream


    【解决方案1】:

    你的括号有点不对,应该是这样的:

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

    【讨论】:

      【解决方案2】:

      假设您以格式获取输入

      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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-13
        • 1970-01-01
        • 1970-01-01
        • 2020-05-11
        • 1970-01-01
        • 2020-10-21
        • 1970-01-01
        相关资源
        最近更新 更多