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