J'ai une API Java qui renvoie une liste comme:
public List<?> getByXPath(String xpathExpr)
J'utilise le code scala ci-dessous:
val lst = node.getByXPath(xpath)
Maintenant, si j'essaye le sucre de syntaxe scala comme:
lst.foreach{ node => ... }
ça ne marche pas. J'obtiens l'erreur:
value foreach is not a member of java.util.List[?0]
Il semble que j'ai besoin de convertir la liste Java en liste Scala. Comment faire cela dans le contexte ci-dessus?
Réponses:
EDIT: Notez que cela est obsolète depuis la 2.12.0. Utilisez
JavaConverters
plutôt. (commentaire de @Yaroslav)Depuis Scala 2.8, cette conversion est désormais intégrée au langage en utilisant:
travaux.
asScala
n'a pas marchéla source
JavaConversions
sont obsolètes depuis la 2.12.0. UtilisezJavaConverters
plutôt.import scala.jdk.CollectionConverters._
scala-lang.org/api/2.13.x/scala/jdk/CollectionConverters$.htmlIl existe un objet Scala pratique juste pour cela - scala.collection.JavaConverters
Vous pouvez faire l'importation et
asScala
ensuite comme suit:Cela devrait vous donner la
Buffer
représentation de Scala vous permettant d'accomplirforeach
.la source
Je cherchais une réponse écrite en Java et étonnamment je n'ai trouvé aucune solution propre ici. Après un certain temps, j'ai pu le comprendre, alors j'ai décidé de l'ajouter ici au cas où quelqu'un d'autre chercherait l'implémentation Java (je suppose que cela fonctionne également dans Scala?):
la source
Si vous devez convertir un Java
List<ClassA>
en ScalaList[ClassB]
, vous devez effectuer les opérations suivantes:1) Ajouter
2) Utilisez des méthodes
asScala
,toList
puismap
3) Ajoutez ce qui suit au
ClassB
constructeur qui reçoitClassA
comme paramètre:la source
Depuis scala 2.8.1, utilisez
JavaConverters._
pour convertir les collections scala et Java en utilisant les méthodes asScala et asJava.import scala.collection.JavaConverters._
javalist.asScala
scalaSeq.asJava
voir le site de documentation Scala Relation de conversion
la source
Raccourci pour convertir la liste java en liste scala
import scala.collection.JavaConverters._
myjavaList.asScala.toList
la source