如何添加到Immutable地图:Scala

时间:2017-11-02 07:49:37

标签: scala functional-programming

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

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

我如何将值添加到Immutable地图,因为我使用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
}

2 个答案:

答案 0 :(得分:4)

我建议:

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

而不是考虑“让我们初始化一个空集合并填充它”,这是一种可变的思考方式,这个命题反而用“让我们宣布如何用它中的那些元素构建一个集合来完成”: - )

答案 1 :(得分:3)

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