2017-11-02 5 views
1

JDBCを使ってHiveから返されたResultSetオブジェクトがあります。不変のマップに追加する方法:Scala

私は、スカラ不変なマップの結果セットに値を格納しようとしています。

私はループ

しばらく
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 
} 

答えて

3

を使用して結果セットを反復処理していて不変のマップにあっ値を追加することができますどのようにあなたは、あなたのJava resultSetのうちの不変のマップを作成することができるようにscala.collection.Iterator[A]を使用する場合があります。

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を使用する必要があります。

4

は私が提案している:

代わりに考えて、この命題はかなりのを構築する方法を宣言しましょう」の観点で考える、「のは空のコレクションを初期化させて、それを埋める」考える変更可能な方法私見であるの
Iterator.continually{ 
    val col = resultSet.getString("col_name") 
    val data = resultSet.getString("data_type") 
    col->data 
    }.takeWhile(_ => resultSet.next()).toMap 

それらの要素が含まれたコレクションを作成してください:

関連する問題