如何添加到不可变地图:Scala



我有一个使用 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
}

我建议:

Iterator.continually{
    val col = resultSet.getString("col_name")
    val data = resultSet.getString("data_type")
    col->data
  }.takeWhile( _ => resultSet.next()).toMap
与其考虑"让我们初始化一个空集合并

填充它",恕我直言,这是可变的思维方式,这个命题而是从"让我们声明如何构建一个包含这些元素的集合并完成"的角度来思考:-)

您可能希望使用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

最新更新