将 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

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

Convert Scala Set into Java (java.util.Set)?

scalatype-conversionscala-collectionsscala-2.8scala-java-interop

提问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)