Bagaimana mengonversi daftar java.util.List ke daftar Scala


105

Saya memiliki metode Scala ini dengan kesalahan di bawah ini. Tidak dapat diubah menjadi daftar Scala.

 def findAllQuestion():List[Question]={
   questionDao.getAllQuestions()
 } 

jenis ketidakcocokan; ditemukan: java.util.List[com.aitrich.learnware.model.domain.entity.Question]wajib: scala.collection.immutable.List[com.aitrich.learnware.model.domain.entity.Question]


3
Orang-orang yang melihat pertanyaan ini mungkin menemukan pertanyaan menarik lainnya ini: stackoverflow.com/questions/8301947/…
Amndeep7

Jawaban:


70
import scala.collection.JavaConversions._

akan melakukan konversi implisit untuk Anda; misalnya:

var list = new java.util.ArrayList[Int](1,2,3)
list.foreach{println}

10
scala.collection.JavaConversions._tidak digunakan lagi scala.collection.JavaConverters._sehingga jawaban ini lebih baik
Dexter Legaspi

JavaConverts sudah tidak digunakan lagi karena mendukung: scala.jdk.CollectionConverters._mulai 2.13. Detailnya dapat ditemukan di sini .
Steven Levine

122

Anda cukup mengonversi Daftar menggunakan Scala's JavaConverters:

import scala.collection.JavaConverters._

def findAllQuestion():List[Question] = {
  questionDao.getAllQuestions().asScala
}

2
Sepertinya ini bekerja .. def findAllStudentTest (): List [StudentTest] = {var list = studentTestDao.getAllStudentTests () var slist = list.asScala.toList slist}
boycod3

13
sebuah java.util.List .asScala muncul kembali sebagai buffer bagi saya secara aneh.
phillro

2
Saya juga: `scala> import scala.collection.JavaConverters._` import scala.collection.JavaConverters._ scala> val l = new java.util.ArrayList [java.lang.String] l: java.util.ArrayList [String ] = [] scala> l.add ("hi") res70: Boolean = true scala> l.add ("de") res71: Boolean = true scala> l.asScala res72: scala.collection.mutable.Buffer [String ] = Buffer (hi, de) `
critium

2
@mauhiz Jika Scala Bufferadalah Java List, maka tidak ada masalah! OP menginginkan konversi dari Daftar Java ke Daftar Scala yang tidak dapat diubah. Ekspresi yang mengharapkan Scala Listtidak akan dicek dengan Buffer.
Andres F.

4
Anda lupa menambahkan .toList sehingga kodenya adalahquestionDao.getAllQuestions().asScala.toList
Raymond Chenon

30
def findAllStudentTest(): List[StudentTest] = { 
  studentTestDao.getAllStudentTests().asScala.toList
} 

3
Mengapa vars? Juga, tampaknya dua baris terakhir dapat digabungkan menjadi satu barislist.asScala.toList
redent84

var list pertama akan mendapatkan daftar util java dan daftar kedua akan mengubah daftar util java ke daftar scala.
boycod3

4
Maksud saya, mengapa varalih - alih valjika Anda tidak memodifikasi variabel
redent84

Tetapi dalam kasus sub operasi, kita perlu menggunakan var daripada val.
boycod3

Baik var listdan val slisttidak perlu. Saya pikir mereka membuat jawaban ini lebih rumit, jadi saya mengkonsolidasikan mereka dan membuat jawabannya lebih sederhana. @ jijeshvu07 Jika Anda tidak setuju, saya akan dengan senang hati membatalkan pengeditan dan mengirimkan perubahan ini sebagai jawabannya.
Cory Klein

9

Dimulai Scala 2.13, paket scala.collection.JavaConvertersditandai sebagai tidak berlaku lagi untuk scala.jdk.CollectionConverters:

import scala.jdk.CollectionConverters._

// val javaList: java.util.List[Int] = java.util.Arrays.asList(1, 2, 3)
javaList.asScala.toList
// List[Int] = List(1, 2, 3)

6

Impor JavaConverters, tanggapan @fynn hilangtoList

import scala.collection.JavaConverters._

def findAllQuestion():List[Question] = {
  //           java.util.List -> Buffer -> List
  questionDao.getAllQuestions().asScala.toList
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.