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


105

У меня есть этот метод 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]


3
Люди, которые рассматривают этот вопрос, могут найти другой интересный вопрос: stackoverflow.com/questions/8301947/…
Amndeep7,

Ответы:


70
import scala.collection.JavaConversions._

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

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

11
scala.collection.JavaConversions._устарел в пользу, scala.collection.JavaConverters._поэтому этот ответ лучше
Декстер Легаспи

JavaConverts устарел в пользу: начиная с версии scala.jdk.CollectionConverters._2.13. Подробности можно найти здесь .
Стивен Левин,

123

Вы можете просто преобразовать список с помощью Scala JavaConverters:

import scala.collection.JavaConverters._

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

2
Кажется, это работает .. def findAllStudentTest (): List [StudentTest] = {var list = studentTestDao.getAllStudentTests () var slist = list.asScala.toList slist}
boycod3

13
java.util.List .asScala как ни странно возвращается в качестве буфера.
phillro

2
Я тоже: `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 Если Scala Bufferявляется Java List, то ничего не будет хорошо! OP требовал преобразования из списка Java List в неизменный список Scala. Выражения, которые ожидают Scala List, не будут проверять тип с помощью Buffer.
Андрес Ф.

4
вы забыли добавить, .toList поэтому код такойquestionDao.getAllQuestions().asScala.toList
Raymond

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

3
Почему varс? Кроме того, кажется, что последние две строки можно объединить в однуlist.asScala.toList
redent84

первый список var получит список java util, а второй slist преобразует список java util в список scala.
boycod3

4
Я имею в виду, почему, varа не valесли вы не
изменяете

Но в случае подопераций нам нужно использовать var вместо val.
boycod3 01

Оба var listи val slistбыли ненужными. Я думаю, что они усложнили этот ответ, поэтому я объединил их и сделал ответ более простым. @ jijeshvu07 Если вы не согласны, я был бы рад отменить правку и вместо этого отправить это изменение в качестве собственного ответа.
Кори Кляйн

9

Начиная Scala 2.13с пакета, scala.collection.JavaConvertersон помечается как устаревший в пользу 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

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

import scala.collection.JavaConverters._

def findAllQuestion():List[Question] = {
  //           java.util.List -> Buffer -> List
  questionDao.getAllQuestions().asScala.toList
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.