Làm thế nào để chuyển đổi java.util.List sang danh sách Scala


105

Tôi có phương pháp Scala này với lỗi bên dưới. Không thể chuyển đổi thành danh sách Scala.

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

loại không phù hợp; tìm thấy: java.util.List[com.aitrich.learnware.model.domain.entity.Question]bắt buộc: scala.collection.immutable.List[com.aitrich.learnware.model.domain.entity.Question]


3
Folks nhìn vào câu hỏi này có thể tìm thấy câu hỏi này đáng chú ý khác: stackoverflow.com/questions/8301947/...
Amndeep7

Câu trả lời:


70
import scala.collection.JavaConversions._

sẽ thực hiện chuyển đổi ngầm cho bạn; ví dụ:

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

10
scala.collection.JavaConversions._không còn được ủng hộ scala.collection.JavaConverters._vì vậy câu trả lời này tốt hơn
Dexter Legaspi

JavaConverts đã không được chấp nhận thay vì: scala.jdk.CollectionConverters._kể từ 2.13. Thông tin chi tiết có thể xem tại đây .
Steven Levine

122

Bạn chỉ cần chuyển đổi Danh sách bằng Scala's JavaConverters:

import scala.collection.JavaConverters._

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

2
Điều này có vẻ hiệu quả .. def findAllStudentTest (): List [StudentTest] = {var list = studentTestDao.getAllStudentTests () var slist = list.asScala.toList slist}
boycod3

13
một java.util.List .asScala quay lại làm bộ đệm cho tôi một cách kỳ lạ.
phillro

2
Tôi cũng vậy: `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 (chào, de) `
phê bình

2
@mauhiz Nếu Scala Bufferlà Java Listthì không có gì ổn cả! OP muốn chuyển đổi từ Danh sách Java sang Danh sách Scala bất biến. Các biểu thức mong đợi một Scala Listsẽ không đánh máy bằng a Buffer.
Andres F.

4
bạn quên thêm .toList để mã làquestionDao.getAllQuestions().asScala.toList
Raymond Chenon

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

3
Tại sao vars? Ngoài ra, có vẻ như hai dòng cuối cùng có thể được kết hợp thành một dòng duy nhấtlist.asScala.toList
redent84

danh sách var đầu tiên sẽ nhận được danh sách sử dụng java và danh sách thứ hai sẽ chuyển đổi danh sách sử dụng java thành danh sách tỷ lệ.
boycod3

4
Ý tôi là, tại sao varthay vì valnếu bạn không thay đổi biến
redent84

Nhưng trong trường hợp hoạt động phụ, cần sử dụng var thay vì val.
boycod 3

Cả hai var listval slistđều không cần thiết. Tôi nghĩ rằng họ đã làm cho câu trả lời này phức tạp hơn, vì vậy tôi đã củng cố chúng và làm cho câu trả lời đơn giản hơn. @ jijeshvu07 Nếu bạn không đồng ý, tôi rất sẵn lòng hoàn tác chỉnh sửa và gửi thay đổi này làm câu trả lời của chính nó.
Cory Klein

9

Bắt đầu Scala 2.13, gói scala.collection.JavaConvertersđược đánh dấu là không dùng nữa vì 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

Nhập JavaConverters, phản hồi của @fynn bị thiếutoList

import scala.collection.JavaConverters._

def findAllQuestion():List[Question] = {
  //           java.util.List -> Buffer -> List
  questionDao.getAllQuestions().asScala.toList
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.