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

C'è un modo migliore per destrutturare Map.Entry? Ho provato quanto segue, ma non viene compilato correttamente:"Distruzione" di una mappa. Ingresso in una chiusura Scala

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

Non stai destrutturazione un 'Map.Entry'. Hai implicitamente convertito il 'java.util.Map' in una scala mappa, e quando lo fai scorrere, stai effettivamente guardando un' Tuple2'. –

risposta

20

Se siete disposti a fare un per la comprensione, mi piace:

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

ma supponendo che si vuole fare m.foreach, mi piace

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

L'esempio 'foreach' che hai dato ha funzionato bene, anche per un java.util.Map (con' scala.collection.JavaConversions._' in ambito). – Ralph

1

questo risponde a una domanda relativa: come convertire un iteratore Java (in questo caso, oltre java.util.Map.Entry) per un iteratore Scala.

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

Questo stampa

(yellow,"banana") 
Problemi correlati