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.