Как преобразовать java.util.List в список Scala

У меня есть этот метод Scala с ошибкой ниже. Невозможно преобразовать в список Scala.

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

несоответствие типов; найдено: java.util.List[com.aitrich.learnware.model.domain.entity.Question] требуется: scala.collection.immutable.List[com.aitrich.learnware.model.domain.entity.Question]


person boycod3    schedule 23.04.2013    source источник
comment
Люди, которые рассматривают этот вопрос, могут найти другой интересный вопрос: stackoverflow.com/questions/8301947/   -  person Amndeep7    schedule 23.04.2017


Ответы (5)


import scala.collection.JavaConversions._

сделает за вас неявное преобразование; например.:

var list = new java.util.ArrayList[Int](1,2,3)
list.foreach{println}
person Neil    schedule 24.10.2015
comment
scala.collection.JavaConversions._ устарел в пользу scala.collection.JavaConverters._, поэтому этот ответ лучше - person Dexter Legaspi; 16.05.2018
comment
JavaConverts устарел и заменен: scala.jdk.CollectionConverters._ с версии 2.13. Подробности можно найти здесь. - person Steven Levine; 28.07.2020

Вы можете просто преобразовать список, используя JavaConverters в Scala:

import scala.collection.JavaConverters._

def findAllQuestion():List[Question] = {
  questionDao.getAllQuestions().asScala.toList
}
person Fynn    schedule 23.04.2013
comment
Кажется, это работает .. def findAllStudentTest (): List [StudentTest] = {var list = studentTestDao.getAllStudentTests () var slist = list.asScala.toList slist} - person boycod3; 24.04.2013
comment
java.util.List .asScala, как ни странно, возвращается в качестве буфера. - person phillro; 17.01.2014
comment
Я тоже: `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 ( привет де) ` - person critium; 18.04.2014
comment
Scala Buffer - это java List. Все отлично :) - person mauhiz; 07.05.2014
comment
@mauhiz Если Scala Buffer - это Java List, тогда ничего в порядке! OP требовал преобразования из списка Java в неизменяемый список Scala. Выражения, которые ожидают List Scala, не будут проверяться по типу с Buffer. - person Andres F.; 15.07.2016
comment
вы забыли добавить .toList, поэтому код будет questionDao.getAllQuestions().asScala.toList - person Raymond Chenon; 13.10.2017
comment
Просто напишите asScala.toList, и он преобразуется в список Scala - person kosiara - Bartosz Kosarzycki; 24.01.2018

Начиная с Scala 2.13, пакет scala.collection.JavaConverters помечается как устаревший в пользу _ 3_:

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)
person Xavier Guihot    schedule 28.03.2019

Импорт JavaConverters, ответ @fynn отсутствовал toList

import scala.collection.JavaConverters._

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

person    schedule
comment
Почему vars? Кроме того, кажется, что последние две строки можно объединить в одну строку list.asScala.toList - person redent84; 20.10.2014
comment
первый список var получит список java util, а второй slist преобразует список java util в список scala. - person boycod3; 27.10.2014
comment
Я имею в виду, почему var вместо val, если вы не изменяете переменную - person redent84; 27.10.2014
comment
Но в случае подопераций нам нужно использовать var вместо val. - person boycod3; 01.12.2014
comment
И var list, и val slist были ненужными. Я думаю, что они усложнили этот ответ, поэтому я объединил их и сделал ответ более простым. @ jijeshvu07 Если вы не согласны, я был бы рад отменить правку и вместо этого отправить это изменение в качестве собственного ответа. - person Cory Klein; 21.01.2015
comment
.asScala, похоже, больше не распознавался (Scala 2.12). Достаточно .toList или .toSeq. - person akauppi; 13.01.2017