Ich habe eine Java-API, die eine Liste zurückgibt wie:
public List<?> getByXPath(String xpathExpr)
Ich verwende den folgenden Scala-Code:
val lst = node.getByXPath(xpath)
Nun, wenn ich Scala Syntax Zucker versuche wie:
lst.foreach{ node => ... }
es funktioniert nicht. Ich bekomme den Fehler:
value foreach is not a member of java.util.List[?0]
Es scheint, dass ich Java List in Scala List konvertieren muss. Wie geht das im obigen Kontext?
Antworten:
BEARBEITEN: Beachten Sie, dass dies seit 2.12.0 veraltet ist. Verwenden Sie
JavaConverters
stattdessen. (Kommentar von @Yaroslav)Seit Scala 2.8 ist diese Konvertierung nun in die Sprache integriert mit:
funktioniert.
asScala
funktioniert nichtquelle
JavaConversions
sind seit 2.12.0 veraltet. Verwenden SieJavaConverters
stattdessen.import scala.jdk.CollectionConverters._
scala-lang.org/api/2.13.x/scala/jdk/CollectionConverters$.htmlDafür gibt es ein praktisches Scala-Objekt - scala.collection.JavaConverters
Sie können den Import und
asScala
danach wie folgt durchführen:Dies sollte Ihnen Scalas
Buffer
Darstellung geben, die es Ihnen ermöglicht, dies zu erreichenforeach
.quelle
Ich suchte nach einer in Java geschriebenen Antwort und konnte hier überraschenderweise keine sauberen Lösungen finden. Nach einer Weile konnte ich es herausfinden und entschied mich, es hier hinzuzufügen, falls jemand anderes nach der Java-Implementierung sucht (ich denke, es funktioniert auch in Scala?):
quelle
Wenn Sie ein Java
List<ClassA>
in eine Scala konvertierenList[ClassB]
müssen, müssen Sie Folgendes tun:1) Hinzufügen
2) Verwendung Methoden
asScala
,toList
und dannmap
3) Fügen Sie dem
ClassB
Konstruktor, derClassA
als Parameter empfängt, Folgendes hinzu :quelle
Seit scala 2.8.1
JavaConverters._
werden Scala- und Java-Sammlungen mit den Methoden asScala und asJava konvertiert.import scala.collection.JavaConverters._
javalist.asScala
scalaSeq.asJava
Weitere Informationen finden Sie auf der Scala-Dokumentenseite für Conversion-Beziehungen
quelle
Verknüpfung zum Konvertieren der Java-Liste in die Scala-Liste
import scala.collection.JavaConverters._
myjavaList.asScala.toList
quelle