我有java
API返回java.util.set
,我想迭代set
直到size-1
并在scala中创建新的java.util.hashset
我试过以下:
val keys = CalltoJavaAPI()
val newHashSet = new java.util.HashSet()
val size = keys.size();
newHashSet.add(keys.take(keys.size() - 1))
但我收到以下错误:
Caused by: java.lang.UnsupportedOperationException
at java.util.AbstractCollection.add(AbstractCollection.java:221)
尝试过以下但仍无法正常工作
val keys = CalltoJavaAPI().asScala
var newHashSet = new scala.collection.mutable.HashSet[Any]()
newHashSet.add(keys.take(keys.size - 1))
答案 0 :(得分:2)
使用scala.collection.JavaConversions
进行Scala和Java集合之间的隐式转换。
在以下方法中,我们将Java HashSet
转换为Scala Set
,提取感兴趣的键,并将结果转换为新的Java HashSet
:
import scala.collection.JavaConversions._
val javaKeys = new java.util.HashSet[Any](CalltoJavaAPI())
val n = javaKeys.size
val scalaSet = javaKeys.toSet.take(n-1)
val newJavaHashSet = new java.util.HashSet[Any]()
newJavaHashSet.addAll(scalaSet)
答案 1 :(得分:0)
我认为您应该使用newHashSet.addAll(...)
代替newHashSet.add(...)
,因为keys.take(...)
会返回List
。
来自docs:
public boolean add(E e):如果指定的元素尚不存在,则将其添加到该集合中。
public boolean addAll(Collection c):将指定集合中的所有元素添加到此集合中