So konvertieren Sie eine java.util.List in eine Scala-Liste


105

Ich habe diese Scala-Methode mit dem folgenden Fehler. Kann nicht in eine Scala-Liste konvertiert werden.

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

Typfehlanpassung; gefunden: java.util.List[com.aitrich.learnware.model.domain.entity.Question]erforderlich: scala.collection.immutable.List[com.aitrich.learnware.model.domain.entity.Question]


3
Leute, die sich diese Frage ansehen,
Amndeep7

Antworten:


70
import scala.collection.JavaConversions._

wird implizite Konvertierung für Sie durchführen; z.B:

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

10
scala.collection.JavaConversions._wird zugunsten von abgelehnt, scala.collection.JavaConverters._daher ist diese Antwort besser
Dexter Legaspi

JavaConverts wurde zugunsten von: scala.jdk.CollectionConverters._ab 2.13 veraltet . Details finden Sie hier .
Steven Levine

122

Sie können die Liste einfach mit Scala konvertieren JavaConverters:

import scala.collection.JavaConverters._

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

2
Dies scheint zu funktionieren .. def findAllStudentTest (): List [StudentTest] = {var list = studentTestDao.getAllStudentTests () var slist = list.asScala.toList slist}
boycod3

12
Eine java.util.List .asScala kommt seltsamerweise als Puffer für mich zurück.
Phillro

2
Ich auch: `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) `
Kriterium

2
@mauhiz Wenn eine Scala Bufferein Java ist List, dann ist nichts in Ordnung! Das OP wollte eine Konvertierung von Java List in eine unveränderliche Scala List. Ausdrücke, die eine Scala erwarten, Listwerden nicht mit a typecheck Buffer.
Andres F.

4
Sie haben vergessen hinzuzufügen, .toList so lautet der CodequestionDao.getAllQuestions().asScala.toList
Raymond Chenon

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

3
Warum das vars? Es scheint auch, dass die letzten beiden Zeilen zu einer einzigen Zeile kombiniert werden könntenlist.asScala.toList
redent84

Die erste Var-Liste erhält die Java-Util-Liste und die zweite Slist konvertiert die Java-Util-Liste in die Scala-Liste.
Boycod3

4
Ich meine, warum varanstatt valwenn Sie die Variable nicht
ändern

Aber in den Unteroperationen müssen wir var anstelle von val verwenden.
Boycod3

Sowohl das var listals auch val slistwaren unnötig. Ich denke, sie haben diese Antwort komplizierter gemacht, also habe ich sie konsolidiert und die Antwort einfacher gemacht. @ jijeshvu07 Wenn Sie nicht einverstanden sind, würde ich gerne die Bearbeitung rückgängig machen und diese Änderung stattdessen als eigene Antwort einreichen.
Cory Klein

9

Ab Scala 2.13dem Start wird das Paket scala.collection.JavaConvertersals veraltet markiert, und zwar zugunsten von 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

Importieren JavaConverters, die Antwort von @fynn fehltetoList

import scala.collection.JavaConverters._

def findAllQuestion():List[Question] = {
  //           java.util.List -> Buffer -> List
  questionDao.getAllQuestions().asScala.toList
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.