2012-04-12 61 views
15

¿Cómo puedo comparar una lista de Scala con una lista de Java?comparando listas de Scala con listas de Java

scala> List(1, 2, 3, 4, 5) 
res0: List[Int] = List(1, 2, 3, 4, 5) 

scala> java.util.Arrays.asList(1, 2, 3, 4, 5) 
res1: java.util.List[Int] = [1, 2, 3, 4, 5] 

scala> res0 == res1 
res2: Boolean = false 

¿Existe algún método de ayuda para la comparación estática que acepte ambas listas Scala y listas de Java? ¿O hay una especie de "envoltorio perezoso" sobre ambos tipos de listas que luego puedo comparar directamente a través del ==?

Respuesta

17

... o use sameElements.

scala> import collection.JavaConversions._ 
import collection.JavaConversions._ 

scala> res0.sameElements(res1)    
res3: Boolean = true 
+0

Tenga en cuenta que esto también provoca que la colección Java se ajuste en un Buffer Scala (que se muestra al utilizar '-Xprint: typer'). Este es el código realmente ejecutado: 'res0.sameElements (asScalaBuffer (res1))' – robinst

+0

Probablemente debería aclarar que mi respuesta solía ser una respuesta a la respuesta de otra persona, en la que decía que ambos podían hacer la conversión implícita a un Scala recopilar y luego comparar, o comparar cada elemento uno por uno. Luego pasó a mostrar cómo se puede hacer eso: tener un método que compare cada elemento. Solo quería decir que hay una manera más fácil de comparar cada elemento para la igualdad. De ahí el "... o use' sameElements'. La respuesta a la que respondo ha sido eliminada después de eso. –

+0

Así que creo que la otra respuesta es en realidad la mejor respuesta. Permítanme votar a favor. –

12

Se puede utilizar para este JavaConverters:

scala> import collection.JavaConverters._ 
import collection.JavaConverters._ 

scala> res0 == res1.asScala 
res2: Boolean = true 

Tenga en cuenta que la única asScala devuelve una vista sobre el original List, consulte la documentación de asScalaBufferConverter en JavaConverters documentación.