2011-02-07 12 views
6
val m: java.util.Map[String, Int] = ... 
m.foreach { entry => 
    val (key, value) = entry 
    // do stuff with key and value 
} 

Map.Entryをより良い方法で削除できますか?私は、次のことを試してみましたが、それはコンパイルされません:ScalaのクロージャーでMap.Entryを「破棄する」

m.foreach { (key, value) => 
    // do stuff with key and value 
} 
+3

を出力します。あなたは 'java.util.Map'を暗黙的にスカラマップに変換し、それを反復すると実際に' Tuple2'を見ています。 –

答えて

20

あなたが理解のために行うために喜んでいる場合は、私が好き:

for((key, value) <- m) println(key, value) 

が、私が好きな、あなたがm.foreachをしたいと仮定すると

m.foreach{ case (key, value) => println(key, value) } 
+0

あなたが与えた 'foreach'の例は、java.util.Map(スコープ内に' scala.collection.JavaConversions._'がある)でもうまくいきました。 – Ralph

1

これは、関連する質問に答える:Scalaのイテレータに(この場合は、java.util.Map.Entry上)は、Javaのイテレータを変換する方法を。

import scala.collection.JavaConverters._ 
import com.fasterxml.jackson.core.JsonFactory 
import com.fasterxml.jackson.databind.JsonNode 
import com.fasterxml.jackson.databind.node.{JsonNodeFactory, MissingNode, ObjectNode} 

val jf = new JsonFactory(true) 
val o = new ObjectNode(jf) 
o.put("yellow","banana") 

for (v <- o.fields.asScala) { println(v.getKey(),v.getValue()) } 

これは、あなたが `Map.Entry`を構造化代入していない

(yellow,"banana") 
関連する問題