Cómo convertir una java.util.List a una lista de Scala


105

Tengo este método Scala con el siguiente error. No se puede convertir en una lista Scala.

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

desajuste de tipos; encontrado: java.util.List[com.aitrich.learnware.model.domain.entity.Question]requerido: scala.collection.immutable.List[com.aitrich.learnware.model.domain.entity.Question]


3
Las personas que miran esta pregunta pueden encontrar esta otra pregunta de interés: stackoverflow.com/questions/8301947/…
Amndeep7

Respuestas:


70
import scala.collection.JavaConversions._

hará una conversión implícita por usted; p.ej:

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

10
scala.collection.JavaConversions._está en desuso a favor de, scala.collection.JavaConverters._por lo que esta respuesta es mejor
Dexter Legaspi

JavaConverts ha quedado obsoleto en favor de: a scala.jdk.CollectionConverters._partir de 2.13. Los detalles se pueden encontrar aquí .
Steven Levine

122

Simplemente puede convertir la Lista usando Scala JavaConverters:

import scala.collection.JavaConverters._

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

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

13
un java.util.List .asScala vuelve como un búfer para mí extrañamente.
phillro

2
Yo también: `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 ​​Scala Bufferes Java List, ¡ nada está bien! El OP quería una conversión de Java List a una Scala List inmutable. Las expresiones que esperan un Scala Listno se verifican con un Buffer.
Andrés F.

4
olvidó agregar, .toList por lo que el código esquestionDao.getAllQuestions().asScala.toList
Raymond Chenon

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

3
¿Por qué la vars? Además, parece que las dos últimas líneas podrían combinarse en una sola línealist.asScala.toList
redent84

la primera lista de var obtendrá la lista de utilidades de Java y la segunda lista convertirá la lista de utilidades de Java a la lista de Scala.
boycod3

4
Quiero decir, ¿por qué en varlugar de valsi no está modificando la variable
Redent84

Pero en el caso de las suboperaciones, necesitamos usar var en lugar de val.
boycod3

Tanto el var listcomo val slisteran innecesarios. Creo que hicieron esta respuesta más complicada, así que los consolidé y simplifiqué la respuesta. @ jijeshvu07 Si no está de acuerdo, me complacerá deshacer la edición y enviar este cambio como su propia respuesta.
Cory Klein

9

A partir Scala 2.13, el paquete scala.collection.JavaConvertersse marca como obsoleto a favor 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

Importar JavaConverters, faltaba la respuesta de @fynntoList

import scala.collection.JavaConverters._

def findAllQuestion():List[Question] = {
  //           java.util.List -> Buffer -> List
  questionDao.getAllQuestions().asScala.toList
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.