/ / Scala equivalente de nuevo HashSet (Colección) - java, scala, scala-collections

Scala equivalente al nuevo HashSet (Colección) - java, scala, scala-colecciones

¿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 № 1

Hay 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