Comment convertir une liste java.util.List en liste Scala

105

J'ai cette méthode Scala avec l'erreur ci-dessous. Impossible de convertir en liste Scala.

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

incompatibilité de type; trouvé: java.util.List[com.aitrich.learnware.model.domain.entity.Question]requis: scala.collection.immutable.List[com.aitrich.learnware.model.domain.entity.Question]

boycod3
la source
3
Les personnes qui examinent cette question pourraient trouver cette autre question intéressante: stackoverflow.com/questions/8301947/…
Amndeep7

Réponses:

70
import scala.collection.JavaConversions._

effectuera une conversion implicite pour vous; par exemple:

var list = new java.util.ArrayList[Int](1,2,3)
list.foreach{println}
Neil
la source
10
scala.collection.JavaConversions._est obsolète en faveur de scala.collection.JavaConverters._donc cette réponse est meilleure
Dexter Legaspi
JavaConverts est obsolète au profit de: à scala.jdk.CollectionConverters._partir de la version 2.13. Les détails peuvent être trouvés ici .
Steven Levine
122

Vous pouvez simplement convertir la liste en utilisant Scala JavaConverters:

import scala.collection.JavaConverters._

def findAllQuestion():List[Question] = {
  questionDao.getAllQuestions().asScala
}
Fynn
la source
2
Cela semble fonctionner .. def findAllStudentTest (): List [StudentTest] = {var list = studentTestDao.getAllStudentTests () var slist = list.asScala.toList slist}
boycod3
13
un java.util.List .asScala me revient bizarrement comme tampon.
phillro
2
Moi aussi: `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) `
critium
2
@mauhiz Si ​​une Scala Bufferest un Java List, alors rien ne va! L'OP voulait une conversion de la liste Java en une liste Scala immuable. Les expressions qui attendent une Scala Listne seront pas vérifiées avec un Buffer.
Andres F.
4
vous avez oublié d'ajouter .toList donc le code estquestionDao.getAllQuestions().asScala.toList
Raymond Chenon
30
def findAllStudentTest(): List[StudentTest] = { 
  studentTestDao.getAllStudentTests().asScala.toList
} 
boycod3
la source
3
Pourquoi le vars? En outre, il semble que les deux dernières lignes pourraient être combinées en une seule lignelist.asScala.toList
redent84
la première liste var obtiendra la liste java util et la seconde slist convertira la liste java util en liste scala.
boycod3
4
Je veux dire, pourquoi varau lieu de valsi vous ne modifiez pas la variable
redent84
Mais dans le cas des sous-opérations, nous devons utiliser var au lieu de val.
boycod3
Les deux var listet val slistétaient inutiles. Je pense qu'ils ont compliqué cette réponse, alors je les ai consolidés et simplifiés. @ jijeshvu07 Si vous n'êtes pas d'accord, je serais heureux d'annuler la modification et de soumettre cette modification à la place comme sa propre réponse.
Cory Klein
9

À partir de Scala 2.13, le package scala.collection.JavaConvertersest marqué comme obsolète au profit de 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)
Xavier Guihot
la source
6

Import JavaConverters, la réponse de @fynn était manquantetoList

import scala.collection.JavaConverters._

def findAllQuestion():List[Question] = {
  //           java.util.List -> Buffer -> List
  questionDao.getAllQuestions().asScala.toList
}
Raymond Chenon
la source