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