如何添加到不可变映射:Scala

如何添加到不可变映射:Scala,scala,functional-programming,Scala,Functional Programming,我有一个使用JDBC从配置单元返回的ResultSet对象 我试图将值存储在Scala不可变映射的结果集中 在使用while循环迭代resultset时,如何向不可变映射添加这些值 val m : Map[String, String] = null while ( resultSet.next() ) { val col = resultSet.getString("col_name") val data = resultSet.getString("data

我有一个使用JDBC从配置单元返回的ResultSet对象

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

在使用while循环迭代resultset时,如何向不可变映射添加这些值

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.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

否则,您必须使用mutable
scala.collection.mutable.Map

您可能需要使用
scala.collection.Iterator[A]
,以便可以从java
结果集创建不可变的映射

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
否则,您必须使用mutable
scala.collection.mutable.Map

我建议:

Iterator.continually{
    val col = resultSet.getString("col_name")
    val data = resultSet.getString("data_type")
    col->data
  }.takeWhile( _ => resultSet.next()).toMap
与其认为“让我们初始化一个空集合并填充它”,这是一种易变的思考方式,不如从“让我们声明如何使用其中的元素构建集合并完成它”的角度来思考这个命题:-

我建议:

Iterator.continually{
    val col = resultSet.getString("col_name")
    val data = resultSet.getString("data_type")
    col->data
  }.takeWhile( _ => resultSet.next()).toMap
与其认为“让我们初始化一个空集合并填充它”,这是一种易变的思考方式,不如从“让我们声明如何使用集合中的那些元素构建集合并完成它”的角度来思考这个命题:-)