簡體   English   中英

如何從Java列表獲取Scala列表?

[英]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列表。 在以上情況下該怎么做?

編輯:請注意,自2.12.0開始不推薦使用。 改用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)使用方法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))
   }
}

我一直在尋找用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM