다음과 같은 List를 반환하는 Java API가 있습니다.
public List<?> getByXPath(String xpathExpr)
아래 스칼라 코드를 사용하고 있습니다.
val lst = node.getByXPath(xpath)
이제 scala 구문 설탕을 다음과 같이 시도하십시오.
lst.foreach{ node => ... }
작동하지 않습니다. 오류가 발생합니다.
value foreach is not a member of java.util.List[?0]
Java List를 Scala List로 변환해야합니다. 위의 상황에서 어떻게합니까?
답변
편집 : 이것은 2.12.0부터 더 이상 사용되지 않습니다. JavaConverters
대신 사용하십시오 . (@Yaroslav의 코멘트)
스칼라 2.8 부터이 변환은 다음을 사용하여 언어에 내장되었습니다.
import scala.collection.JavaConversions._
...
lst.toList.foreach{ node => .... }
공장. asScala
작동하지 않았다
답변
이것을 위해 편리한 스칼라 객체가 있습니다 -scala.collection.JavaConverters
asScala
다음과 같이 가져 오기를 수행 한 후 수행 할 수 있습니다 .
import scala.collection.JavaConverters._
val lst = node.getByXPath(xpath).asScala
lst.foreach{ node => .... }
이를 통해 스칼라의 Buffer
표현을 통해 달성 할 수 있습니다 foreach
.
답변
Java로 작성된 답변을 찾고 있었고 놀랍게도 깨끗한 솔루션을 찾을 수 없었습니다. 잠시 후 다른 사람이 Java 구현을 찾고있는 경우를 대비하여 여기에 추가하기로 결정했습니다 (스칼라에서도 작동한다고 생각하십니까?).
JavaConversions.asScalaBuffer(myJavaList).toList()
답변
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) 매개 변수로 ClassB
받는 생성자에 다음을 추가하십시오 ClassA
.
case class ClassB () {
def this (classA: ClassA) {
this (new ClassB (classA.getAttr1, ..., classA.getAttrN))
}
}
답변
scala 2.8.1부터 JavaConverters._
asScala 및 asJava 메소드를 사용하여 스칼라 및 Java 콜렉션을 변환 하는 데 사용합니다.
import scala.collection.JavaConverters._
javalist.asScala
scalaSeq.asJava
전환 관계 스칼라 문서 사이트 참조
답변
Java 목록을 스칼라 목록으로 변환하는 바로 가기
import scala.collection.JavaConverters._
myjavaList.asScala.toList