将 java.util.Set 转换为 scala.collection.Set
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6143747/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Convert java.util.Set to scala.collection.Set
提问by Twistleton
How can I convert a java.util.Set[String] to a scala.collection.Set with a generic type in Scala 2.8.1?
如何在 Scala 2.8.1 中将 java.util.Set[String] 转换为具有泛型类型的 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 : _*)
And this is the error message
这是错误信息
<console>:9: error: type mismatch;
found : Array[java.lang.Object]
required: Array[_ <: String]
val out : scala.collection.immutable.Set[String] = Set(javaset.toArray : _*)
What am I doing wrong?
我究竟做错了什么?
采纳答案by Mark Jayxcela
toArray()called on a java Setwill return an array of Object. Since you already imported JavaConversions, asScalaSetwill implicitly convert your Java set to a mutable Scala set or use toSetto convert it to an immutable set.
toArray()在 java 上调用Set将返回一个Object. 由于您已经导入了JavaConversions,asScalaSet会将您的 Java 集隐式转换为可变 Scala 集或用于toSet将其转换为不可变集。
回答by oluies
Use JavaConvertersinstead
使用JavaConverters代替
import scala.collection.JavaConverters._
val out = in.asScala
out: scala.collection.mutable.Set[String] = Set(Hugo, Oscar)

