什么是Java等效的 Scala 构造函数(创建一个不可变的) HashSet
new HashSet<T>(c)
c
类型在哪里Collection<? extends T>
?
我在HashSet
Object中只能找到apply
.
什么是Java等效的 Scala 构造函数(创建一个不可变的) HashSet
new HashSet<T>(c)
c
类型在哪里Collection<? extends T>
?
我在HashSet
Object中只能找到apply
.
最简洁的方法可能是使用++
运算符:
import scala.collection.immutable.HashSet
val list = List(1,2,3)
val set = HashSet() ++ list
答案分为两部分。第一部分是采用 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 是同义词。
从 Scala 2.13 开始使用伴生对象
import scala.collection.immutable.HashSet
val list = List(1,2,3)
val set = HashSet.from(list)