¿Cuál es el constructor de Scala equivalente (para crear un inmutable HashSet
) a la Java
new HashSet<T>(c)
dónde c
es de tipo Collection<? extends T>
?.
Todo lo que puedo encontrar en el HashSet
Objeto es apply
.
Respuestas
7 para la respuesta № 1Hay dos partes en la respuesta. La primera parte es que los métodos de argumento variable de Scala que toman un T * son una combinación de métodos que toman Seq [T]. Le dice a Scala que trate una Seq [T] como una lista de argumentos en lugar de un solo argumento usando "seq: _ *".
La segunda parte es convertir una Colección [T] aa Seq [T]. No hay una forma general incorporada de hacerlo en las bibliotecas estándar de Scala por el momento, pero una forma muy fácil (si no necesariamente eficiente) de hacerlo es llamando a Array. Aquí hay un ejemplo completo.
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)
Tenga en cuenta que scala.Predef.Set y scala.collection.immutable.HashSet son sinónimos.
11 para la respuesta № 2
La forma más concisa de hacer esto es probablemente usar el ++
operador:
import scala.collection.immutable.HashSet
val list = List(1,2,3)
val set = HashSet() ++ list