Come convertire un java.util.List in un elenco Scala


105

Ho questo metodo Scala con l'errore di seguito. Impossibile convertire in un elenco Scala.

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

tipo non corrispondente; trovato: java.util.List[com.aitrich.learnware.model.domain.entity.Question]richiesto: scala.collection.immutable.List[com.aitrich.learnware.model.domain.entity.Question]


3
La gente a guardare a questa domanda potrebbero trovare questa altra questione di interesse: stackoverflow.com/questions/8301947/...
Amndeep7

Risposte:


70
import scala.collection.JavaConversions._

farà la conversione implicita per te; per esempio:

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

10
scala.collection.JavaConversions._è deprecato a favore di scala.collection.JavaConverters._quindi questa risposta è migliore
Dexter Legaspi

JavaConverts è stato deprecato a favore di: scala.jdk.CollectionConverters._dalla 2.13. I dettagli possono essere trovati qui .
Steven Levine

122

Puoi semplicemente convertire la lista usando Scala JavaConverters:

import scala.collection.JavaConverters._

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

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

13
un java.util.List .asScala ritorna come un buffer per me stranamente.
phillro

2
Anch'io: `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) `
critica

2
@mauhiz Se una Scala Bufferè un Java List, allora niente va bene! L'OP voleva una conversione da Java List a una Scala List immutabile. Le espressioni che si aspettano una scala Listnon eseguiranno il controllo del tipo con un file Buffer.
Andres F.

4
hai dimenticato di aggiungere .toList quindi il codice èquestionDao.getAllQuestions().asScala.toList
Raymond Chenon

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

3
Perché la vars? Inoltre, sembra che le ultime due righe possano essere combinate in un'unica rigalist.asScala.toList
redent84

il primo var list otterrà java util list e il secondo slist convertirà java util list in scala list.
boycod3

4
Voglio dire, perché varinvece di valnon modificare la variabile
redent84

Ma nelle operazioni secondarie del caso, dobbiamo usare var invece di val.
boycod3

Sia il var listche val slistnon erano necessari. Penso che abbiano reso questa risposta più complicata, quindi le ho consolidate e ho reso la risposta più semplice. @ jijeshvu07 Se non sei d'accordo, sarei felice di annullare la modifica e inviare questa modifica invece come risposta.
Cory Klein

9

A partire Scala 2.13, il pacchetto scala.collection.JavaConvertersè contrassegnato come deprecato a favore di 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

Import JavaConverters, mancava la risposta di @fynntoList

import scala.collection.JavaConverters._

def findAllQuestion():List[Question] = {
  //           java.util.List -> Buffer -> List
  questionDao.getAllQuestions().asScala.toList
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.