2010-04-25 97 views
34

如何scala.collection.JavaConversions凌駕在堆棧溢出問題給出的答案Iterating over Java collections in Scala(這是行不通的,因爲「JCL」包走了),並在Iterating over Map with Scala(它不適合我在複雜的測試工作,這是我將嘗試煮沸並在此後發佈)。在Scala 2.8.0中迭代Java Map的新方法是什麼?

後者實際上是一個斯卡拉地圖的問題,但我想我需要知道這兩個答案才能遍歷java.util.Map

回答

74

在2.8中,您導入了scala.collection.JavaConversions._並用作Scala地圖。下面是一個例子(2.8.0.RC1):

scala> val jmap:java.util.Map[String,String] = new java.util.HashMap[String,String] 
jmap: java.util.Map[String,String] = {} 

scala> jmap.put("Hi","there") 
res0: String = null 

scala> jmap.put("So","long") 
res1: String = null 

scala> jmap.put("Never","mind") 
res2: String = null 

scala> import scala.collection.JavaConversions._ 
import scala.collection.JavaConversions._ 

scala> jmap.foreach(kv => println(kv._1 + " -> " + kv._2)) 
Hi -> there 
Never -> mind 
So -> long 

scala> jmap.keys.map(_.toUpperCase).foreach(println) 
HI 
NEVER 
SO 

如果你特別想要一個斯卡拉迭代器,使用jmap.iterator(後轉換進口)。

+0

哇,這是一個偉大的,無痛的解決方案! – rasen58 2017-06-14 21:35:30

+0

應該有一種不轉換爲Scala地圖的方式,對吧?如果我們在循環中迭代java map,它將會更好,這將避免不必要的對象創建。 「找到:(String,String)=>單元 必需:java.util.function.BiConsumer [_>:String,_>:String]」錯誤。 – 2017-06-20 15:41:46

+0

@ZxcvMnb - 現在你應該使用'JavaConverters'並明確地改變它們;隨着Java 8增加了一個'foreach'方法,你不能再對'foreach'使用隱式轉換。 – 2017-06-26 23:04:31

相關問題