如何添加到不可变映射:Scala
我有一个使用JDBC从配置单元返回的ResultSet对象 我试图将值存储在Scala不可变映射的结果集中 在使用while循环迭代resultset时,如何向不可变映射添加这些值如何添加到不可变映射: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
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]
,以便可以从javaresultSet
中创建不可变的映射
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
否则,您必须使用mutablescala.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
与其认为“让我们初始化一个空集合并填充它”,这是一种易变的思考方式,不如从“让我们声明如何使用集合中的那些元素构建集合并完成它”的角度来思考这个命题:-)