25

Tengo un conjunto en Scala (puedo elegir cualquier implementación porque estoy creando el conjunto. La biblioteca de Java que estoy usando espera un java.util.Set [String].Convertir Scala Establecer en Java (java.util.Set)?

Es la siguiente forma correcta de hacer esto en Scala (usando scala.collection.jcl.HashSet # subyacentes):

import com.javalibrary.Animals 

var classes = new scala.collection.jcl.HashSet[String] 
classes += "Amphibian" 
classes += "Reptile" 
Animals.find(classes.underlying) 

parece estar funcionando, pero ya que soy muy nuevo en Scala Quiero saber si esta es la forma preferida (cualquier otra manera trato que estoy recibiendo un error de tipo-desajuste):

error: type mismatch; 
found : scala.collection.jcl.HashSet[String] 
required: java.util.Set[_] 

Respuesta

23

Si preguntaba acerca de Scala 2.8, la interoperabilidad de las colecciones de Java es suministrada por scala.collection.JavaConversions. En este caso, quiere JavaConversions.asSet (...) (hay una para cada dirección, Java -> Scala y Scala -> Java).

Para Scala 2.7, cada clase scala.collection.jcl que envuelve una colección Java tiene una propiedad underlying que proporciona la instancia de la colección Java envuelta.

+0

Eso es bueno saber! Estaba en Scala 2.7. – arnab

7

Desde Scala 2.12.0 scala.collection.JavaConversionsis deprecated:

Por lo tanto, esta API ha quedado obsoleto y JavaConverters se debe utilizar en su lugar. JavaConverters proporciona las mismas conversiones, pero a través de métodos de extensión.

Y puesto Scala 2.8.1 se puede usescala.collection.JavaConverters para este propósito:

import scala.collection.JavaConverters._ 
val javaSet = new java.util.HashSet[String]() 
val scalaSet = javaSet.asScala 
val javaSetAgain = scalaSet.asJava 
0

En Scala 2.12 es posible utilizar: scala.collection.JavaConverters.setAsJavaSet(scalaSetInstance)

Cuestiones relacionadas