tutorial software fungicida examples blanquerna scala

software - ¿Cómo obtener Scala List de la lista de Java?



scala vs java (5)

Desde Scala 2.8, esta conversión ahora está integrada en el lenguaje utilizando:

import scala.collection.JavaConversions._ ... lst.toList.foreach{ node => .... }

trabajos. asScala no funcionó

Tengo una API de Java que devuelve una lista como:

public List<?> getByXPath(String xpathExpr)

Estoy usando el siguiente código scala:

val lst = node.getByXPath(xpath)

Ahora bien, si pruebo la 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 la Lista de Java a la Lista de Scala. ¿Cómo hacer eso en el contexto anterior?


Estaba buscando una respuesta escrita en Java y sorprendentemente no pude encontrar ninguna solución limpia aquí. Después de un tiempo pude descifrarlo, 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?):

JavaConversions.asScalaBuffer(myJavaList).toList()


Hay un útil objeto Scala solo para esto - scala.collection.JavaConverters

Puede hacer la importación y asScala después de la siguiente manera:

import scala.collection.JavaConverters._ val lst = node.getByXPath(xpath).asScala lst.foreach{ node => .... }

Esto debería darte la representación de Buffer de Scala que te permite lograr foreach .


Si tiene que convertir una List<ClassA> Java List<ClassA> a una List[ClassB] Scala List[ClassB] , debe hacer lo siguiente:

1) Agregar

import scala.collection.JavaConverters._

2) Usa métodos como asScala , toList y luego toList

List <ClassA> javaList = ... var scalaList[ClassB] = javaList.asScala.toList.map(x => new ClassB(x))

3) Agregue lo siguiente al constructor ClassB que recibe ClassA como parámetro:

case class ClassB () {    def this (classA: ClassA) {       this (new ClassB (classA.getAttr1, ..., classA.getAttrN))    } }


desde el usuario de scala 2.8.1 JavaConvertest._

Colecciones Scala y Java usando los métodos AsScala y asJava.

import scala.collection.JavaConverters._

javalist.asScala

scalaSeq.asJava

vea la relación de Conversión del sitio scala doc