&引用;“解构”;Scala闭包中的Map.Entry

&引用;“解构”;Scala闭包中的Map.Entry,scala,closures,destructuring,Scala,Closures,Destructuring,有没有更好的方法来分解地图条目?我尝试了以下操作,但无法编译: val m: java.util.Map[String, Int] = ... m.foreach { entry => val (key, value) = entry // do stuff with key and value } 如果你愿意为理解做一个测试,我喜欢: m.foreach { (key, value) => // do stuff with key and value } 这回答了一

有没有更好的方法来分解地图条目?我尝试了以下操作,但无法编译:

val m: java.util.Map[String, Int] = ...
m.foreach { entry =>
  val (key, value) = entry
  // do stuff with key and value
}

如果你愿意为理解做一个测试,我喜欢:

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

这回答了一个相关的问题:如何将Java迭代器(在本例中,通过Java.util.Map.Entry)转换为Scala迭代器

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

您给出的
foreach
示例运行良好,即使是对于java.util.Map(范围中包含
scala.collection.JavaConversions.\uu
),也不会对
Map.Entry进行分解。您隐式地将
java.util.Map
转换为scala映射,当您迭代该映射时,实际上看到的是一个
Tuple2
 m.foreach{ case (key, value) => println(key, value) }
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()) }
(yellow,"banana")