【问题标题】:How to add to an Immutable map : Scala如何添加到不可变地图:Scala
【发布时间】:2017-11-03 00:50:29
【问题描述】:

我有一个使用 JDBC 从 Hive 返回的 ResultSet 对象。

我正在尝试将值存储在 Scala 不可变映射的结果集中。

当我使用 while 循环迭代结果集时,如何将值添加到不可变映射中

val m : Map[String, String] = null

while ( resultSet.next() ) {
        val col = resultSet.getString("col_name")
        val data = resultSet.getString("data_type")

      m += (col -> data) // This Gives Reassignment error
}

【问题讨论】:

    标签: scala functional-programming


    【解决方案1】:

    我提议:

    Iterator.continually{
        val col = resultSet.getString("col_name")
        val data = resultSet.getString("data_type")
        col->data
      }.takeWhile( _ => resultSet.next()).toMap
    

    与其思考“让我们初始化一个空集合并填充它”(这是一种可变的思考方式),不如说是“让我们声明如何使用其中的元素构建一个集合并完成”: -)

    【讨论】:

      【解决方案2】:

      您可能想要使用scala.collection.Iterator[A],以便您可以从您的java resultSet 创建不可变映射。

      val myMap : Map[String, String] = new Iterator[(String, String)] {
      
        override def hasNext = resultSet.next()
      
        override def next() = {
          val col = resultSet.getString("col_name")
          val data = resultSet.getString("data_type")
      
          col -> data
        }
      
      }.toMap
      

      否则你必须使用可变的scala.collection.mutable.Map

      【讨论】:

        猜你喜欢
        • 2015-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-09
        • 2019-08-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多