Sửa: cách khuyến cáo hiện nay là sử dụng JavaConverters
và .asScala
phương pháp:
import scala.collection.JavaConverters._
val myScalaMap = myJavaMap.asScala.mapValues(_.asScala.toSet)
này có lợi thế là không sử dụng chuyển đổi tiềm ẩn huyền diệu nhưng các cuộc gọi rõ ràng để .asScala
, trong khi ở sạch sẽ và consise.
Câu trả lời ban đầu với JavaConversions
:
Bạn có thể sử dụng scala.collection.JavaConversions
để ngầm chuyển đổi giữa Java và Scala:
import scala.collection.JavaConversions._
val myScalaMap = myJavaMap.mapValues(_.toSet)
Calling mapValues
sẽ kích hoạt một chuyển đổi ngầm từ java Map
để một scala Map
và sau đó gọi toSet
trên bộ sưu tập java với ngầm chuyển đổi nó thành một bộ sưu tập scala và sau đó đến một Set
.
Theo mặc định, nó trả về một biến thể Map
, bạn có thể nhận được một biến đổi bất biến với số .toMap
bổ sung.
ngắn ish dụ:
scala> val a: java.util.Map[String, java.util.Collection[String]] = new java.util.HashMap[String, java.util.Collection[String]]
a: java.util.Map[String,java.util.Collection[String]] = {}
scala> val b = new java.util.ArrayList[String]
b: java.util.ArrayList[String] = []
scala> b.add("hi")
res5: Boolean = true
scala> a.put("a", b)
res6: java.util.Collection[String] = []
scala> import scala.collection.JavaConversions._
import scala.collection.JavaConversions._
scala> val c = a.mapValues(_.toSet)
c: scala.collection.Map[String,scala.collection.immutable.Set[String]] = Map(a -> Set(hi))
scala> c.toMap
res7: scala.collection.immutable.Map[String,scala.collection.immutable.Set[String]] = Map(a -> Set(hi))
nhìn vào bài đăng này: http://stackoverflow.com/questions/3127238/convert-java-util-mapstring-object-to-scala- collection-immutable-mapstring –
và trang này: http://www.scala-lang.org/docu/files/collections-api/collections_46.html –
@LutherBlisset: Nó có cùng kết quả như mapAsScalaMap: Map [SomeObject, java .util.Collection [OtherObject]] – Ha11owed