将 Scala Set 转换为 Java (java.util.Set)?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/2233576/
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 Scala Set into Java (java.util.Set)?
提问by arnab
I have a Set in Scala (I can choose any implementation as I am creating the Set. The Java library I am using is expecting a java.util.Set[String].
我在 Scala 中有一个 Set(我可以在创建 Set 时选择任何实现。我使用的 Java 库需要一个 java.util.Set[String]。
Is the following the correct way to do this in Scala (using scala.collection.jcl.HashSet#underlying):
以下是在 Scala 中执行此操作的正确方法(使用 scala.collection.jcl.HashSet#underlying):
import com.javalibrary.Animals
var classes = new scala.collection.jcl.HashSet[String]
classes += "Amphibian"
classes += "Reptile"
Animals.find(classes.underlying)
It seems to be working, but since I am very new to Scala I want to know if this is the preferred way (any other way I try I am getting a type-mismatch error):
它似乎有效,但由于我对 Scala 非常陌生,我想知道这是否是首选方式(我尝试的任何其他方式都会出现类型不匹配错误):
error: type mismatch;
found : scala.collection.jcl.HashSet[String]
required: java.util.Set[_]
采纳答案by Randall Schulz
If you were asking about Scala 2.8, Java collections interoperability is supplied by scala.collection.JavaConversions. In this case, you want JavaConversions.asSet(...) (there's one for each direction, Java -> Scala and Scala -> Java).
如果您问的是 Scala 2.8,Java 集合互操作性由scala.collection.JavaConversions. 在这种情况下,您需要 JavaConversions.asSet(...)(每个方向都有一个,Java -> Scala 和 Scala -> Java)。
For Scala 2.7, each scala.collection.jcl class that wraps a Java collection has an underlyingproperty which provides the wrapped Java collection instance.
对于 Scala 2.7,包装 Java 集合的每个 scala.collection.jcl 类都有一个underlying提供包装的 Java 集合实例的属性。
回答by mixel
Since Scala 2.12.0 scala.collection.JavaConversionsis deprecated:
由于 Scala 2.12.0scala.collection.JavaConversions已弃用:
Therefore, this API has been deprecated and JavaConverters should be used instead. JavaConverters provides the same conversions, but through extension methods.
因此,此 API 已被弃用,应改用 JavaConverters。JavaConverters 提供相同的转换,但通过扩展方法。
And since Scala 2.8.1 you can usescala.collection.JavaConvertersfor this purpose:
从 Scala 2.8.1 开始,您可以为此目的使用scala.collection.JavaConverters:
import scala.collection.JavaConverters._
val javaSet = new java.util.HashSet[String]()
val scalaSet = javaSet.asScala
val javaSetAgain = scalaSet.asJava
回答by Viktor Klang
For 2.7.x I highlyrecommend using: http://github.com/jorgeortiz85/scala-javautils
对于 2.7.x,我强烈建议使用:http: //github.com/jorgeortiz85/scala-javautils
回答by Xavier Guihot
Note that starting Scala 2.13, package scala.jdk.CollectionConvertersreplaces deprecated packages scala.collection.JavaConverters/JavaConversions._:
请注意,开始时Scala 2.13,包会scala.jdk.CollectionConverters替换不推荐使用的包scala.collection.JavaConverters/JavaConversions._:
import scala.jdk.CollectionConverters._
// val scalaSet: Set[String] = Set("a", "b")
val javaSet = scalaSet.asJava
// javaSet: java.util.Set[String] = [a, b]
javaSet.asScala
// scala.collection.mutable.Set[String] = Set(a, b)
回答by Mohsen Kashi
In Scala 2.12 it is possible to use : scala.collection.JavaConverters.setAsJavaSet(scalaSetInstance)
在 Scala 2.12 中可以使用: scala.collection.JavaConverters.setAsJavaSet(scalaSetInstance)

