将 java.util.Set 转换为 scala.collection.Set

问题描述 投票:0回答:3

如何在 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 : _*)

这是错误消息

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

我做错了什么?

scala set
3个回答
25
投票

使用 JavaConverters 代替

import scala.collection.JavaConverters._

val out = in.asScala

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

16
投票
在 java

toArray() 上调用

Set
 将返回 
Object
数组。由于您已经导入了
JavaConversions
,因此
asScalaSet
会隐式地将您的 Java 集转换为可变的 Scala 集,或使用
toSet
将其转换为不可变集。

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


0
投票

这是一个过时的答案。需要导入

import scala.jdk.CollectionConverters.*

https://docs.scala-lang.org/overviews/collections-2.13/conversions- Between-java-and-scala-collections.html

所示

然后根据目标集合类型使用

.asScala
.asJava
方法。

© www.soinside.com 2019 - 2024. All rights reserved.