如何将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

Answers:


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._因此此答案更好
Dexter Legaspi

scala.jdk.CollectionConverters._从2.13 开始,不推荐使用JavaConverts 。详细信息可以在这里找到。
史蒂文·莱文

122

您只需使用Scala的转换列表即可JavaConverters

import scala.collection.JavaConverters._

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

2
这似乎工作..高清findAllStudentTest():列表[StudentTest] = {VAR列表= 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:布尔值= true scala> l.add(“ de”)res71:布尔值= true scala> l.asScala res72:scala.collection.mutable.Buffer [String ] = Buffer(hi,de)`
critium

2
@mauhiz如果Scala Buffer是Java List,那就没有问题了!OP希望从Java列表转换为不可变的Scala列表。期望Scala的表达式List不会使用进行类型检查Buffer
Andres F.

4
您忘了添加,.toList 所以代码是questionDao.getAllQuestions().asScala.toList
Raymond Chenon 17-10-13

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

3
为什么是vars?此外,似乎最后两行可以合并为一行list.asScala.toList
redent84 2014年

第一个var列表将获取java util列表,第二个slist会将java util列表转换为scala列表。
boycod3 2014年

4
我的意思是,为什么var而不是val如果您不修改变量
redent84 2014年

但是在子操作的情况下,我们需要使用var而不是val。
boycod3 2014年

无论是var listval 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
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.