Saya memiliki API Java yang mengembalikan Daftar seperti:
public List<?> getByXPath(String xpathExpr)
Saya menggunakan kode scala di bawah ini:
val lst = node.getByXPath(xpath)
Sekarang jika saya mencoba scala sintaks gula seperti:
lst.foreach{ node => ... }
tidak bekerja. Saya mendapatkan kesalahan:
value foreach is not a member of java.util.List[?0]
Sepertinya saya perlu mengonversi Java List ke Scala List. Bagaimana melakukannya dalam konteks di atas?
Jawaban:
EDIT: Perhatikan bahwa ini sudah usang sejak 2.12.0. Gunakan
JavaConverters
sebagai gantinya. (komentar oleh @Yaroslav)Sejak Scala 2.8 konversi ini sekarang dibangun ke dalam bahasa menggunakan:
bekerja.
asScala
tidak bekerjasumber
JavaConversions
sudah ditinggalkan sejak 2.12.0. GunakanJavaConverters
sebagai gantinya.import scala.jdk.CollectionConverters._
scala-lang.org/api/2.13.x/scala/jdk/CollectionConverters$.htmlAda objek Scala yang berguna hanya untuk ini - scala.collection.JavaConverters
Anda dapat melakukan impor dan
asScala
sesudahnya sebagai berikut:Ini akan memberi Anda
Buffer
representasi Scala yang memungkinkan Anda untuk melakukannyaforeach
.sumber
Saya mencari jawaban yang ditulis di Jawa dan secara mengejutkan tidak menemukan solusi bersih di sini. Setelah beberapa saat saya bisa mengetahuinya jadi saya memutuskan untuk menambahkannya di sini kalau-kalau ada orang lain yang mencari implementasi Java (saya kira itu juga berfungsi di Scala?):
sumber
Jika Anda harus mengonversi Java
List<ClassA>
ke ScalaList[ClassB]
, maka Anda harus melakukan hal berikut:1) Tambahkan
2) Gunakan metode
asScala
,toList
lalumap
3) Tambahkan yang berikut ke
ClassB
konstruktor yang menerimaClassA
sebagai parameter:sumber
Karena scala 2.8.1 digunakan
JavaConverters._
untuk mengkonversi koleksi scala dan Java menggunakan metode asScala dan asJava.import scala.collection.JavaConverters._
javalist.asScala
scalaSeq.asJava
lihat situs scala doc hubungan konversi
sumber
Shortcut untuk mengubah daftar java ke daftar scala
import scala.collection.JavaConverters._
myjavaList.asScala.toList
sumber