Як конвертувати 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}

10
scala.collection.JavaConversions._застаріла на користь, scala.collection.JavaConverters._тому відповідь краще
Декстер Легаспі

JavaConverts застаріло на користь: scala.jdk.CollectionConverters._станом на 2.13. Деталі можна знайти тут .
Стівен Левін

122

Ви можете просто конвертувати Список за допомогою Scala JavaConverters:

import scala.collection.JavaConverters._

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

2
Це здається працює .. def findAllStudentTest (): Список [StudentTest] = {var list = studentTestDao.getAllStudentTests () var slist = list.asScala.toList list}
boycod3

13
java.util.List .asScala повертається як буфер для мене дивно.
філлро

2
Я теж: `scala> імпорт scala.collection.JavaConverters._` імпорт scala.collection.JavaConverters._ scala> val l = new java.util.ArrayList [java.lang.String] l: java.util.ArrayList [String ] = [] scala> l.add ("привіт") res70: булева = справжня шкала> l.add ("de") res71: булева = справжня шкала> l.asScala res72: scala.collection.mutable.Buffer [String ] = Буфер (привіт, де) `
критика

2
@mauhiz Якщо Scala Buffer- це Java List, то нічого поганого ! ОП хотіла перетворення зі списку Java в незмінний список Scala. Вирази, які очікують, що Scala Listне буде встановити прапорець із символом a Buffer.
Андрес Ф.

4
ви забули додати, .toList щоб кодquestionDao.getAllQuestions().asScala.toList
Реймонд Шенон

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

3
Чому vars? Також здається, що останні два рядки можна було б об'єднати в один рядокlist.asScala.toList
redent84

перший список вар отримає список утилітів java, а другий список перетворить список утилітів java у список шкал.
boycod3

4
Я маю на увазі, чому varзамість того, valякщо ви не змінюєте змінну
redent84

Але у випадку суб-операцій, вам потрібно використовувати var замість val.
boycod3

І те, 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.