10

什么是Java等效的 Scala 构造函数(创建一个不可变的) HashSet

new HashSet<T>(c)

c类型在哪里Collection<? extends T>

我在HashSet Object中只能找到apply.

4

3 回答 3

14

最简洁的方法可能是使用++运算符:

import scala.collection.immutable.HashSet
val list = List(1,2,3)
val set = HashSet() ++ list
于 2009-03-23T18:42:16.853 回答
8

答案分为两部分。第一部分是采用 T* 的 Scala 可变参数方法是采用 Seq[T] 的方法的糖化。您告诉 Scala 将 Seq[T] 视为参数列表,而不是使用“seq : _*”的单个参数。

第二部分是将 Collection[T] 转换为 Seq[T]。Scala 的标准库中还没有通用的内置方法,但是一种非常简单(如果不一定有效)的方法是调用 toArray. 这是一个完整的例子。

scala> val lst : java.util.Collection[String] = new java.util.ArrayList
lst: java.util.Collection[String] = []

scala> lst add "hello"
res0: Boolean = true

scala> lst add "world"
res1: Boolean = true

scala> Set(lst.toArray : _*)
res2: scala.collection.immutable.Set[java.lang.Object] = Set(hello, world)

注意 scala.Predef.Set 和 scala.collection.immutable.HashSet 是同义词。

于 2009-03-23T18:36:47.553 回答
0

从 Scala 2.13 开始使用伴生对象

import scala.collection.immutable.HashSet
val list = List(1,2,3)
val set = HashSet.from(list)
于 2022-01-07T23:34:27.183 回答