Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Java列表中获取Scala列表?_Java_Scala - Fatal编程技术网

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

如何从Java列表中获取Scala列表?,java,scala,Java,Scala,我有一个Java API,它返回如下列表: public List<?> getByXPath(String xpathExpr) 现在,如果我尝试scala语法,比如: lst.foreach{ node => ... } 它不起作用。我得到一个错误: value foreach is not a member of java.util.List[?0] 似乎我需要将Java列表转换为Scala列表。如何在上面的上下文中做到这一点?有一个方便的Scala对象,只用于此-

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

public List<?> getByXPath(String xpathExpr)
现在,如果我尝试scala语法,比如:

lst.foreach{ node => ... }
它不起作用。我得到一个错误:

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

似乎我需要将Java列表转换为Scala列表。如何在上面的上下文中做到这一点?

有一个方便的Scala对象,只用于此-

您可以按如下方式进行导入和
asScala

导入scala.collection.JavaConverters_
val lst=node.getByXPath(xpath).asScala
lst.foreach{node=>…}
这将为您提供Scala的
缓冲区
表示,允许您完成
foreach

编辑:注意,自2.12.0以来,它已被弃用。改用
JavaConverters
。(雅罗斯拉夫评论) 由于Scala 2.8此转换现在内置到语言中,使用:

import scala.collection.JavaConversions._

...

lst.toList.foreach{ node =>   .... }
工作<代码>协会不起作用

在2.12.x中,使用
导入scala.collection.JavaConverters.\uu


在2.13.x中,使用导入scala.jdk.CollectionConverters.\u

我正在寻找用Java编写的答案,但令人惊讶的是,在这里找不到任何干净的解决方案。过了一段时间,我终于明白了这一点,所以我决定在这里添加它,以防其他人正在寻找Java实现(我想它在Scala中也能工作?):


如果必须将Java
列表
转换为Scala
列表[ClassB]
,则必须执行以下操作:

1) 加

2) 使用方法
asScala
toList
然后
map

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

因为scala 2.8.1使用了
JavaConverters.\uz
使用asScala和asJava方法转换scala和Java集合

导入scala.collection.JavaConverters.\ucode>

javalist.asScala

scalaSeq.asJava


请参见转换关系

将java列表转换为scala列表的快捷方式

导入scala.collection.JavaConverters.\ucode>


myjavaList.asScala.toList

可能与@Kim重复:我不确定是否适合将此作为特定问题的重复来结束--特定问题涉及Scala 2.7,scala 2.8和2.9中不再存在scala.collection.jcl包。在2.10.4中,我必须导入scala.collection.JavaConverters。否则我得到了“value asScala不是java.util.List[String]的成员”
javaconversion
自2.12.0以来一直被弃用。改用
JavaConverters
。对于2.13.x,您需要
导入scala.jdk.CollectionConverters。
JavaConverters应该优先于JavaConverters,因为它使转换显式化(并避免可能混淆的意外转换)。(也就是说,这是正确的答案)因为scala 2.13这个类也被弃用了。改用scala.jdk.CollectionConverters。
JavaConversions.asScalaBuffer(myJavaList).toList()
import scala.collection.JavaConverters._
List <ClassA> javaList = ...
var scalaList[ClassB] = javaList.asScala.toList.map(x => new ClassB(x))
case class ClassB () {
   def this (classA: ClassA) {
      this (new ClassB (classA.getAttr1, ..., classA.getAttrN))
   }
}