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

Czy istnieje lepszy sposób na zniszczenie mapy.Entry? Próbowałem następujących, ale nie kompilacji:"Przeszkadzać" Map.Entry w zamknięciu Scala

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

Nie jesteś do demontażu struktury 'Map.Entry'. Konwertowałeś niejawnie 'java.util.Map' na mapę scala, a kiedy ją przeglądasz, faktycznie patrzysz na' Tuple2'. –

Odpowiedz

20

Jeżeli jesteś gotów zrobić dla zrozumienia, lubię:

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

ale zakładając chcesz zrobić m.foreach lubię

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

Przykład "foreach" działał dobrze, nawet dla java.util.Map (z 'scala.collection.JavaConversions._' w zakresie). – Ralph

1

ten odbierze powiązane pytanie: jak przekonwertować iterator Java (w tym przypadku, ponad java.util.Map.Entry) do iteracyjnej 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()) } 

ten wypisuje

(yellow,"banana") 
Powiązane problemy