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

Có cách nào tốt hơn để hủy cấu trúc Map.Entry không? Tôi cố gắng điều sau đây, nhưng nó không biên dịch:"Destructuring" một Map.Entry trong một đóng cửa Scala

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

Bạn không destructuring một 'Map.Entry'. Bạn ngầm chuyển đổi 'java.util.Map' thành một bản đồ scala, và khi bạn lặp lại thông qua đó, bạn đang thực sự nhìn vào một' Tuple2'. –

Trả lời

20

Nếu bạn sẵn sàng để làm một để hiểu, tôi thích:

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

nhưng giả sử bạn muốn làm m.foreach, tôi thích

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

Ví dụ 'foreach' bạn đã làm việc tốt, ngay cả đối với một java.util.Map (với' scala.collection.JavaConversions._' trong phạm vi). – Ralph

1

Trả lời câu hỏi liên quan: cách chuyển đổi trình lặp Java (trong trường hợp này, qua java.util.Map.Entry) sang trình lặp lặp 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()) } 

này in ra

(yellow,"banana") 
Các vấn đề liên quan