Tengo una API Java que devuelve una lista como:
public List<?> getByXPath(String xpathExpr)
Estoy usando el siguiente código scala:
val lst = node.getByXPath(xpath)
Ahora si pruebo el azúcar de sintaxis scala como:
lst.foreach{ node => ... }
No funciona. Me sale el error:
value foreach is not a member of java.util.List[?0]
Parece que necesito convertir Java List a Scala List. ¿Cómo hacer eso en el contexto anterior?
Respuestas:
EDITAR: Tenga en cuenta que esto está en desuso desde 2.12.0. Usar en su
JavaConverters
lugar. (comentario de @Yaroslav)Desde Scala 2.8, esta conversión ahora está integrada en el lenguaje usando:
trabajos.
asScala
no funcionófuente
JavaConversions
están en desuso desde 2.12.0. Usar en suJavaConverters
lugar.import scala.jdk.CollectionConverters._
scala-lang.org/api/2.13.x/scala/jdk/CollectionConverters$.htmlHay un práctico objeto Scala solo para esto: scala.collection.JavaConverters
Puede hacer la importación y
asScala
luego de la siguiente manera:Esto debería darle la
Buffer
representación de Scala que le permite lograrforeach
.fuente
Estaba buscando una respuesta escrita en Java y sorprendentemente no pude encontrar ninguna solución limpia aquí. Después de un tiempo pude resolverlo, así que decidí agregarlo aquí en caso de que alguien más esté buscando la implementación de Java (¿supongo que también funciona en Scala?):
fuente
Si tiene que convertir un Java
List<ClassA>
a un ScalaList[ClassB]
, debe hacer lo siguiente:1) Agregar
2) Use métodos
asScala
,toList
y luegomap
3) Agregue lo siguiente al
ClassB
constructor que recibeClassA
como parámetro:fuente
Desde scala 2.8.1 se usa
JavaConverters._
para convertir colecciones de scala y Java usando los métodos asScala y asJava.import scala.collection.JavaConverters._
javalist.asScala
scalaSeq.asJava
ver el sitio de Scala doc de relación de conversión
fuente
Atajo para convertir la lista de Java a la lista de Scala
import scala.collection.JavaConverters._
myjavaList.asScala.toList
fuente