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