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.