2011-05-26 64 views
19

如何使用Scala 2.8.1中的泛型類型將java.util.Set [String]轉換爲scala.collection.Set?將java.util.Set轉換爲scala.collection.Set

import scala.collection.JavaConversions._ 

var in : java.util.Set[String] = new java.util.HashSet[String]() 

in.add("Oscar") 
in.add("Hugo") 

val out : scala.collection.immutable.Set[String] = Set(in.toArray : _*) 

這是錯誤消息

<console>:9: error: type mismatch; 
found : Array[java.lang.Object] 
required: Array[_ <: String] 
val out : scala.collection.immutable.Set[String] = Set(javaset.toArray : _*) 

我在做什麼錯?

回答

15

toArray()叫上一個java Set將返回Object數組。由於您已經導入了JavaConversions,asScalaSet會將您的Java集隱式轉換爲可變的Scala集,或使用toSet將其轉換爲不可變集。

又見Convert Scala Set into Java (java.util.Set)

+0

我讀過它們,但函數asSet不起作用。 toSet工作正常。非常感謝你。 – Twistleton 2011-05-26 19:40:37

18

使用JavaConverters代替

import scala.collection.JavaConverters._ 

val out = in.asScala 

out: scala.collection.mutable.Set[String] = Set(Hugo, Oscar) 
+0

奇怪,但這import語句失敗:我用Scala的2.8.1版 – Twistleton 2011-05-26 19:44:59

+0

JavaConverters進口scala.collection.JavaConverters._是avaliable由於2.8.1 – oluies 2011-05-26 19:48:04

+0

檢查!你是對的! – Twistleton 2011-05-26 19:57:23

相關問題