2009-03-23 36 views

Respuesta

7

La respuesta tiene dos partes. La primera parte es que los métodos de argumento variable de Scala que toman una T * son un azolve sobre los métodos que toman Seq [T]. Le dices a Scala que trate una Seq [T] como una lista de argumentos en lugar de un solo argumento usando "seq: _ *".

La segunda parte consiste en convertir una Colección [T] en una Seq [T]. Todavía no existe una forma general de hacerlo en las bibliotecas estándar de Scala, pero una manera 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) 

Nota del scala.Predef.Set y scala.collection.immutable.HashSet son sinónimos.

+0

Como resulta que no puedo hacer esto porque mi colección "interior" es en realidad una instancia de java.util. Lista, no una Scala Seq. He hecho esta pregunta como seguimiento: http://stackoverflow.com/questions/674713/converting-java-collection-into-scala-collection –

11

La forma más concisa para hacer esto es probablemente utilizar el operador ++:

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