as
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, si pruebo el azúcar de sintaxis de 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?
as
EDITAR: tenga en cuenta que esto está en desuso desde 2.12.0. Usar JavaConverters
en cambio. (comentario de @Yaroslav)
Ya que escala 2.8 esta conversión ahora está integrada en el lenguaje usando:
import scala.collection.JavaConversions._
...
lst.toList.foreach{ node => .... }
obras. asScala
no funcionó
En uso 2.12.x import scala.collection.JavaConverters._
En 2.13.x uso import scala.jdk.CollectionConverters._
-
En 2.10.4 tuve que importar scala.collection.JavaConverters._ de lo contrario obtuve “valor como Scala no es miembro de java.util.List[String]”
– dranxo
23 mayo 2014 a las 23:27
-
JavaConversions
están en desuso desde 2.12.0. UsarJavaConverters
en cambio.– Yaroslav
5 de abril de 2017 a las 10:47
-
Para 2.13.x, necesita
import scala.jdk.CollectionConverters._
scala-lang.org/api/2.13.x/scala/jdk/CollectionConverters$.html– Nikolaos Georgiou
21 de septiembre de 2019 a las 4:00
montreal.eric
Hay un objeto Scala útil solo para esto: scala.collection.JavaConverters
Puedes 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 Scala Buffer
representación que le permite lograr foreach
.
-
Se debe preferir JavaConverters a JavaConversions ya que hace que la conversión sea explícita (y evita conversiones accidentales que pueden ser confusas). (Es decir, esta es la respuesta correcta)
– Marca
18/09/2014 a las 17:34
-
desde Scala 2.13, esta clase también está en desuso. Utilice scala.jdk.CollectionConverters en su lugar.
– stackunderflow
17 oct 2019 a las 19:41
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?):
JavaConversions.asScalaBuffer(myJavaList).toList()
leandro carrasco
Si tiene que convertir un Java List<ClassA>
a una escala List[ClassB]
entonces debes hacer lo siguiente:
1) Agregar
import scala.collection.JavaConverters._
2) Usar métodos asScala
, toList
y entonces map
List <ClassA> javaList = ...
var scalaList[ClassB] = javaList.asScala.toList.map(x => new ClassB(x))
3) Agregue lo siguiente a la ClassB
constructor que recibe ClassA
como parámetro:
case class ClassB () {
def this (classA: ClassA) {
this (new ClassB (classA.getAttr1, ..., classA.getAttrN))
}
}
Xing Wei Lin
Acceso directo para convertir la lista de java a la lista de scala
import scala.jdk.CollectionConverters._
myjavaList.asScala.toList
-
scala.collection.JavaConverters._
es obsoleto. Usar:scala.jdk.CollectionConverters._
–Branislav Lazic
9 de noviembre de 2021 a las 12:25
piro
Desde el uso de Scala 2.8.1 JavaConverters._
para convertir colecciones de Scala y Java utilizando los métodos asScala y asJava.
import scala.collection.JavaConverters._
javalist.asScala
scalaSeq.asJava
ver la relación de conversión sitio scala doc
-
scala.collection.JavaConverters._
es obsoleto. Usar:scala.jdk.CollectionConverters._
–Branislav Lazic
9 de noviembre de 2021 a las 12:25
posible duplicado de Convertir la colección Java en la colección Scala
– Kim Stebel
15 de junio de 2011 a las 11:00
@Kim: No estoy seguro de que sea apropiado cerrar esto como un duplicado de esa pregunta en particular; esa pregunta en particular habla de Scala 2.7, y el paquete scala.collection.jcl ya no existe en Scala 2.8 y 2.9.
–Ken Bloom
15 de junio de 2011 a las 15:08