วิธีการแปลง java.util.List เป็นรายการ Scala


105

ฉันมีวิธี Scala นี้โดยมีข้อผิดพลาดด้านล่าง ไม่สามารถแปลงเป็นรายการ Scala

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

ประเภทไม่ตรงกัน พบ: java.util.List[com.aitrich.learnware.model.domain.entity.Question]จำเป็น: scala.collection.immutable.List[com.aitrich.learnware.model.domain.entity.Question]


3
คนที่ดูคำถามนี้อาจพบคำถามอื่น ๆ ที่น่าสนใจ: stackoverflow.com/questions/8301947/…
Amndeep7

คำตอบ:


71
import scala.collection.JavaConversions._

จะทำการแปลงโดยปริยายสำหรับคุณ เช่น:

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

11
scala.collection.JavaConversions._ถูกเลิกใช้scala.collection.JavaConverters._เพื่อให้คำตอบนี้ดีกว่า
Dexter Legaspi

JavaConverts เลิกใช้งานแล้วโดยใช้: scala.jdk.CollectionConverters._ณ 2.13 รายละเอียดสามารถพบได้ที่นี่
Steven Levine

124

คุณสามารถแปลงรายการโดยใช้ Scala JavaConverters:

import scala.collection.JavaConverters._

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

2
ดูเหมือนว่าจะได้ผล .. def findAllStudentTest (): List [StudentTest] = {var list = studentTestDao.getAllStudentTests () var slist = list.asScala.toList slist}
boycod3

13
java.util.List .asScala กลับมาเป็นบัฟเฟอร์สำหรับฉันอย่างแปลกประหลาด
phillro

2
ฉันด้วย: `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 (สวัสดีเดอ) `
Critium

2
@mauhiz ถ้า Scala Bufferเป็น Java Listก็ไม่มีอะไรดี! OP ต้องการการแปลงจากรายการ Java เป็นรายการสกาล่าที่ไม่เปลี่ยนรูป นิพจน์ที่คาดว่า Scala Listจะไม่พิมพ์ตรวจสอบด้วย a Buffer.
Andres F.

4
คุณลืมใส่.toList รหัสจึงเป็นquestionDao.getAllQuestions().asScala.toList
Raymond Chenon

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

3
ทำไมvar? นอกจากนี้ดูเหมือนว่าสองบรรทัดสุดท้ายสามารถรวมกันเป็นบรรทัดเดียวได้list.asScala.toList
redent84

รายการ var แรกจะได้รับรายการ java util และตัวเลื่อนที่สองจะแปลงรายการ java util เป็นรายการ scala
boycod3

4
ฉันหมายความว่าทำไมvarแทนที่จะเป็นvalถ้าคุณไม่ได้แก้ไขตัวแปร
redent84

แต่ในกรณีย่อยการดำเนินการ wee จำเป็นต้องใช้ var แทน val
boycod3

ทั้งvar listและval slistไม่จำเป็น ฉันคิดว่าพวกเขาทำให้คำตอบนี้ซับซ้อนขึ้นดังนั้นฉันจึงรวบรวมคำตอบและทำให้คำตอบง่ายขึ้น @ jijeshvu07 หากคุณไม่เห็นด้วยเรายินดีที่จะยกเลิกการแก้ไขและส่งการเปลี่ยนแปลงนี้เป็นคำตอบของตัวเองแทน
Cory Klein

9

เริ่มต้นScala 2.13แพคเกจscala.collection.JavaConvertersถูกทำเครื่องหมายเป็นเลิกในความโปรดปรานของ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

นำเข้าJavaConvertersการตอบกลับของ @fynn หายไปtoList

import scala.collection.JavaConverters._

def findAllQuestion():List[Question] = {
  //           java.util.List -> Buffer -> List
  questionDao.getAllQuestions().asScala.toList
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.