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

Map.Entry öğelerini imha etmenin daha iyi bir yolu var mı? Ben aşağıdaki çalıştım, ama derlemek değildir: Sevdiğim,Scala kapamasında bir Map.Entry yok "Yapılandırma"

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

ancak m.foreach yapmak istiyorum varsayarak: Eğer anlama için bir yapmak isteyen varsa

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

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()) } 

bu yazdırır. "Java.util.Map" öğesini bir scala Haritasına dolaylı olarak dönüştürdünüz ve bunun üzerinden yinelediğinizde aslında bir "Tuple2" ye bakıyorsunuz. –

cevap

20

, Sevdiğim

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

Verdiğiniz "foreach" örneği, java.util.Map için bile (scala.collection.JavaConversions._' kapsam dahilinde) iyi çalıştı. – Ralph

1

Bu ilgili soruya cevap verir: bir Scala yineleyici için (java.util.Map.Entry üzerinden bu durumda,) bir Java yineleyici dönüştürmek için nasıl. Bir `Map.Entry` kurucuların değiliz

(yellow,"banana")