2009-03-23 7 views

risposta

7

Ci sono due parti per la risposta. La prima parte è che i metodi di argomenti variabili di Scala che prendono un T * sono un metodo di sovrascrittura che richiede Seq [T]. Dite a Scala di trattare un Seq [T] come una lista di argomenti invece di un singolo argomento usando "seq: _ *".

La seconda parte converte una raccolta [T] in una Seq [T]. Non c'è ancora un modo generale per farlo nelle librerie standard di Scala, ma un modo molto facile (anche se non necessariamente efficiente) è di chiamare aArray. Ecco un esempio 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 scala.Predef.Set e scala.collection.immutable.HashSet sono sinonimi.

+0

Come si è visto che non può farlo perché la mia collezione "interna" è in realtà un esempio di java.util. Elenco, non un Seq Scala. Ho fatto questa domanda come un seguito: http://stackoverflow.com/questions/674713/converting-java-collection-into-scala-collection –

11

Il modo più conciso per fare questo è probabilmente quello di utilizzare l'operatore di ++:

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