![](/img/trans.png)
[英]How to pass Java List to Scala, filter it in Scala and get back to Java?
[英]How to get Scala List from Java List?
我有一個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列表轉換為Scala列表。 在以上情況下該怎么做?
JavaConverters
。 (@Yaroslav發表評論) 從Scala 2.8開始,此轉換現在使用以下語言構建到語言中:
import scala.collection.JavaConversions._
...
lst.toList.foreach{ node => .... }
作品。 asScala
無法正常運作
為此有一個方便的Scala對象-scala.collection.JavaConverters
之后,您可以執行import和asScala
,如下所示:
import scala.collection.JavaConverters._
val lst = node.getByXPath(xpath).asScala
lst.foreach{ node => .... }
這應該為您提供Scala的Buffer
表示形式,使您可以完成foreach
。
如果必須將Java List<ClassA>
轉換為Scala List[ClassB]
,則必須執行以下操作:
1)添加
import scala.collection.JavaConverters._
2)使用方法asScala
, toList
然后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))
}
}
我一直在尋找用Java編寫的答案,令人驚訝的是,這里找不到任何干凈的解決方案。 過了一會兒我就知道了,所以我決定在這里添加它,以防其他人正在尋找Java實現(我想它也可以在Scala中使用嗎?):
JavaConversions.asScalaBuffer(myJavaList).toList()
從scala 2.8.1開始,使用JavaConverters._
使用asScala和asJava方法轉換scala和Java集合。
import scala.collection.JavaConverters._
javalist.asScala
scalaSeq.asJava
請參閱轉化關系scala文檔網站
將Java列表轉換為Scala列表的快捷方式
import scala.collection.JavaConverters._
myjavaList.asScala.toList
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.