将 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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-22 03:01:59  来源:igfitidea点击:

Convert java.util.Set to scala.collection.Set

scalaset

提问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将其转换为不可变集。

See also Convert Scala Set into Java (java.util.Set)

另请参阅将 Scala 集转换为 Java (java.util.Set)

回答by oluies

Use JavaConvertersinstead

使用JavaConverters代替

import scala.collection.JavaConverters._

val out = in.asScala

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