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]


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}

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
}

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
} 

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)

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
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.