/ / Scala odpowiednik nowego HashSet (Collection) - java, scala, scala-collections

Scala odpowiednik nowego HashSet (Collection) - java, scala, scala-collections

Co to jest odpowiednik konstruktora Scala (aby utworzyć niezmienny HashSet) do Javy

new HashSet<T>(c)

gdzie c jest typu Collection<? extends T>?

Wszystko, co mogę znaleźć w HashSet Obiekt jest apply.

Odpowiedzi:

7 dla odpowiedzi № 1

Odpowiedzi są podzielone na dwie części. Pierwsza część jest taka, że ​​metody zmiennych zmiennych Scala, które pobierają T *, są słownictwem w stosunku do metod przyjmujących Seq [T]. Mówisz Scali, aby traktowała Seq [T] jako listę argumentów zamiast pojedynczego argumentu używając "seq: _ *".

Druga część polega na konwersji kolekcji [T] naa Seq [T]. W standardowych bibliotekach Scala nie ma jeszcze żadnych ogólnych rozwiązań, ale jednym z bardzo łatwych (jeśli nie koniecznie skutecznych) sposobów jest wywołanie funkcji Array. Oto pełny przykład.

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)

Zwróć uwagę, że scala.Predef.Set i scala.collection.immutable.HashSet są synonimami.


11 dla odpowiedzi nr 2

Najbardziej zwięzłym sposobem na to jest prawdopodobnie użycie ++ operator:

import scala.collection.immutable.HashSet
val list = List(1,2,3)
val set = HashSet() ++ list