programing

Java List에서 Scala List를 가져오려면 어떻게 해야 하나요?

goodsources 2022. 10. 30. 11:14
반응형

Java List에서 Scala 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로 변환해야 할 것 같습니다.위의 문맥에서 어떻게 그것을 할 것인가?

EDIT: 이것은 2.12.0 이후 폐지되었습니다.사용하다JavaConverters대신.(@yaroslav의 코멘트)

Scala 2.8 이후 이 변환은 다음과 같은 기능을 사용하여 언어로 구현되었습니다.

import scala.collection.JavaConversions._

...

lst.toList.foreach{ node =>   .... }

작동하다.asScala동작하지 않았다

2.12.x 사용 시import scala.collection.JavaConverters._

2.13.x 사용 시import scala.jdk.CollectionConverters._

scala. 컬렉션에만 유용한 Scala 객체는 scala.collection입니다.자바 컨버터

Import 및asScala그 후 다음과 같이 합니다.

import scala.collection.JavaConverters._

val lst = node.getByXPath(xpath).asScala
lst.foreach{ node =>   .... }

이것으로 스칼라를 얻을 수 있습니다.Buffer표현에 의해 실현될 수 있습니다.foreach.

자바어로 된 답변을 찾고 있었는데 의외로 깨끗한 솔루션을 찾을 수 없었습니다.잠시 후 알 수 있었기 때문에 다른 사용자가 Java 구현을 찾고 있는 경우를 대비해 여기에 추가하기로 했습니다(Scala에서도 동작할 수 있을 것 같습니다).

JavaConversions.asScalaBuffer(myJavaList).toList()

Java를 변환해야 하는 경우List<ClassA>스칼라로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))
   }
}

Java 목록을 스칼라 목록으로 변환하는 바로 가기

import scala.jdk.CollectionConverters._

myjavaList.asScala.toList

scala 2.8.1을 사용하기 때문에JavaConverters._asScala 및 asJava 메서드를 사용하여 scala 및 Java 컬렉션을 변환합니다.

import scala.collection.JavaConverters._

javalist.asScala

scalaSeq.asJava

변환 관계 scala 문서 사이트 참조

언급URL : https://stackoverflow.com/questions/6356465/how-to-get-scala-list-from-java-list

반응형