如何将java.util.List转换为Scala列表

boy*_*od3 102 scala list scala-java-interop

我有这个Scala方法,错误如下.无法转换为Scala列表.

 def findAllQuestion():List[Question]={
   questionDao.getAllQuestions()
 } 
Run Code Online (Sandbox Code Playgroud)

类型不匹配; 发现:java.util.List[com.aitrich.learnware.model.domain.entity.Question]必填: scala.collection.immutable.List[com.aitrich.learnware.model.domain.entity.Question]

Fyn*_*ynn 111

您可以使用Scala简单地转换List JavaConverters:

import scala.collection.JavaConverters._

def findAllQuestion():List[Question] = {
  questionDao.getAllQuestions().asScala
}
Run Code Online (Sandbox Code Playgroud)

  • 一个java.util.List .asScala奇怪地回来作为我的缓冲区. (10认同)
  • 这看起来很有效.. def findAllStudentTest():List [StudentTest] = {var list = studentTestDao.getAllStudentTests()var slist = list.asScala.toList slist} (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 ] =缓冲区(hi,de)` (2认同)
  • @mauhiz如果Scala`Buffst`是一个Java`List`,那么*没有*就好了!OP希望从Java List转换为不可变的Scala List.期望Scala`List`的表达式不会使用`Buffer`进行类型检查. (2认同)
  • 你忘了添加`.toList`所以代码是`questionDao.getAllQuestions().asScala.toList` (2认同)
  • 只需编写 `asScala.toList` 它将转换为 Scala 列表 (2认同)

Nei*_*eil 68

import scala.collection.JavaConversions._
Run Code Online (Sandbox Code Playgroud)

会为你做隐式转换; 例如:

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

  • 不推荐使用`scala.collection.JavaConversions._`来支持`scala.collection.JavaConverters._`所以[这个答案](/sf/answers/1131491441/)更好 (9认同)
  • 从 2.13 开始,JavaConverts 已被弃用,取而代之的是:`scala.jdk.CollectionConverters._`。详细信息可以在[此处](/sf/answers/3878589711/)找到。 (3认同)

boy*_*od3 27

def findAllStudentTest(): List[StudentTest] = { 
  studentTestDao.getAllStudentTests().asScala.toList
} 
Run Code Online (Sandbox Code Playgroud)

  • 我的意思是,如果你没有修改变量,为什么`var`而不是`val` (4认同)
  • 为什么`var`s?此外,似乎最后两行可以组合成一行`list.asScala.toList` (3认同)

Xav*_*hot 14

开始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)
Run Code Online (Sandbox Code Playgroud)


Ray*_*non 7

导入JavaConverters,@ fynn的响应丢失了toList

import scala.collection.JavaConverters._

def findAllQuestion():List[Question] = {
  //           java.util.List -> Buffer -> List
  questionDao.getAllQuestions().asScala.toList
}
Run Code Online (Sandbox Code Playgroud)