Что является эквивалентом Scala конструктор (чтобы создать неизменныHashSet
) в JavaScala эквивалент новой HashSet (Collection)
new HashSet<T>(c)
где c
имеет тип Collection<? extends T>
?.
Все, что я могу найти в HashSet
Объект is apply
.
Что является эквивалентом Scala конструктор (чтобы создать неизменныHashSet
) в JavaScala эквивалент новой HashSet (Collection)
new HashSet<T>(c)
где c
имеет тип Collection<? extends T>
?.
Все, что я могу найти в HashSet
Объект is apply
.
Есть две части ответа. Первая часть состоит в том, что методы аргументов переменной Scala, которые принимают T *, являются методом сахарирования над методами, использующими Seq [T]. Вы скажете Scala рассматривать Seq [T] как список аргументов вместо одного аргумента, используя «seq: _ *».
Вторая часть преобразует коллекцию [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 являются синонимами.
Самый краткий способ сделать это, вероятно, использовать ++
оператор:
import scala.collection.immutable.HashSet
val list = List(1,2,3)
val set = HashSet() ++ list
Как выясняется, я не могу этого сделать, потому что мой «внутренний» коллекция на самом деле является экземпляром java.util. Список, а не Scala Seq. Я задал этот вопрос в качестве продолжения: http://stackoverflow.com/questions/674713/converting-java-collection-into-scala-collection –