Relacionado à questão do Stack Overflow Scala equivalente a new HashSet (Collection) , como faço para converter uma coleção Java ( java.util.List
digamos) em uma coleção Scala List
?
Na verdade, estou tentando converter uma chamada de API Java para Spring SimpleJdbcTemplate
, que retorna um java.util.List<T>
, em um Scala imutável HashSet
. Então, por exemplo:
val l: java.util.List[String] = javaApi.query( ... )
val s: HashSet[String] = //make a set from l
Isso parece funcionar. A crítica é bem-vinda!
import scala.collection.immutable.Set
import scala.collection.jcl.Buffer
val s: scala.collection.Set[String] =
Set(Buffer(javaApi.query( ... ) ) : _ *)
java
scala
scala-collections
scala-2.7
oxbow_lakes
fonte
fonte
Para referência futura: Com Scala 2.8, isso poderia ser feito assim:
set
é umscala.collection.immutable.Set[String]
depois disso.Veja também a resposta de Ben James para uma forma mais explícita (usando JavaConverters), que parece ser recomendada agora.
fonte
JavaConversions
tem alguns implícitos que tornam atoSet
chamada desnecessária.Se quiser ser mais explícito do que JavaConversions demonstrado na resposta de robinst , você pode usar JavaConverters:
fonte
JavaConversions ( resposta de robinst ) e JavaConverters ( resposta de Ben James ) foram descontinuados com Scala 2.10 .
Em vez de JavaConversions, use:
como sugerido por aleksandr_hramcov .
Ao invés de JavaConverters, use:
Para ambos também existe a possibilidade de importar apenas as conversões / conversores para Java ou Scala respectivamente, por exemplo:
Atualização: a declaração acima de que JavaConversions e JavaConverters foram descontinuados parece estar errada. Havia algumas propriedades reprovadas no Scala 2.10, o que resultou em avisos de descontinuação ao importá-las. Portanto, as importações alternativas aqui parecem ser apenas aliases. Embora eu ainda prefira eles, como IMHO os nomes são mais apropriados.
fonte
Você também pode querer explorar esta excelente biblioteca: scalaj-collection que possui conversão bidirecional entre coleções Java e Scala. No seu caso, para converter um java.util.List em Scala List, você pode fazer o seguinte:
fonte
Iniciando
Scala 2.13
, pacotescala.jdk.CollectionConverters
substitui pacotesscala.collection.JavaConverters/JavaConversions._
:fonte
fonte
Você pode adicionar as informações de tipo na chamada toArray para fazer o conjunto ser parametrizado:
Isso pode ser preferível, pois o pacote de coleções está passando por um grande retrabalho para Scala 2.8 e o pacote scala.collection.jcl está indo embora
fonte
Você pode converter a coleção Java em uma matriz e, em seguida, criar uma lista Scala a partir disso:
fonte
Outra maneira simples de resolver esse problema:
fonte