如何从Java列表中获取Scala列表?

我有一个Java API,返回一个列表如下:

public List<?> getByXPath(String xpathExpr) 

我正在使用下面的Scala代码:

 val lst = node.getByXPath(xpath) 

现在,如果我尝试scala语法糖,如:

 lst.foreach{ node => ... } 

这是行不通的。 我得到的错误:

 value foreach is not a member of java.util.List[?0] 

看来我需要将Java List转换为Scala List。 如何在上述情况下做到这一点?

Scala 2.8开始,这种转换现在已经内置在语言中了:

 import scala.collection.JavaConversions._ ... lst.toList.foreach{ node => .... } 

作品。 asScala没有工作

有一个方便的Scala对象 – scala.collection.JavaConverters

之后你可以进行导入和asScala ,如下所示:

 import scala.collection.JavaConverters._ val lst = node.getByXPath(xpath).asScala lst.foreach{ node => .... } 

这应该给你Scala的Buffer表示允许你完成foreach

我正在寻找用Java编写的答案,并且在这里找不到任何干净的解决scheme。 过了一段时间,我能够弄清楚,所以我决定在这里添加它,以防别人正在寻找Java实现(我想这也适用于Scala?):

 JavaConversions.asScalaBuffer(myJavaList).toList() 

如果您必须将Java List<ClassA>转换为Scala List[ClassB] ,则必须执行以下操作:

1)添加

 import scala.collection.JavaConverters._ 

2)使用方法asScalatoList然后map

 List <ClassA> javaList = ... var scalaList[ClassB] = javaList.asScala.toList.map(x => new ClassB(x)) 

3)将以下内容添加到接收ClassA作为参数的ClassB构造函数中:

 case class ClassB () {  def this (classA: ClassA) {     this (new ClassB (classA.getAttr1, ..., classA.getAttrN))  } }