itsource

스칼라 변환 방법java.util.List에 목록 표시?

mycopycode 2022. 9. 11. 18:28
반응형

스칼라 변환 방법java.util.List에 목록 표시?

Scala 변환 방법scala.List자바어로java.util.List?

왜 이런 말을 안 했는지 모르겠지만 가장 직관적인 방법은 이 명령어를 호출하는 것입니다.asJavaJavaConverters의 decorator 메서드를 Scala 목록에 직접 추가합니다.

scala> val scalaList = List(1,2,3)
scalaList: List[Int] = List(1, 2, 3)

scala> import scala.collection.JavaConverters._
import scala.collection.JavaConverters._

scala> scalaList.asJava
res11: java.util.List[Int] = [1, 2, 3]

Scala List와 Java List는 서로 다른 두 동물입니다. 왜냐하면 전자는 불변이고 후자는 변하기 쉽기 때문입니다.따라서 다른 것으로 이동하려면 먼저 Scala List를 가변 컬렉션으로 변환해야 합니다.

Scala 2.7의 경우:

import scala.collection.jcl.Conversions.unconvertList
import scala.collection.jcl.ArrayList
unconvertList(new ArrayList ++ List(1,2,3))

Scala 2.8 이후:

import scala.collection.JavaConversions._
import scala.collection.mutable.ListBuffer
asList(ListBuffer(List(1,2,3): _*))
val x: java.util.List[Int] = ListBuffer(List(1,2,3): _*)

하지만,asList이 예에서는 예상되는 타입이 Java인 경우에는 필요 없습니다.List마지막 행에서 알 수 있듯이 변환이 암묵적이기 때문입니다.

이전 답변을 요약하면

다음과 같은 것이 있다고 가정합니다.List:

scala> val scalaList = List(1,2,3)
scalaList: List[Int] = List(1, 2, 3)

명시적으로 변환할 대상을 정확하게 지정하는 경우:

scala> import scala.collection.JavaConverters._
import scala.collection.JavaConverters._

scala> scalaList.asJava
res11: java.util.List[Int] = [1, 2, 3]

변환을 공동 제어하지 않고 컴파일러가 암묵적으로 작동하게 하려면:

scala> import scala.collection.JavaConversions._
import scala.collection.JavaConversions._

scala> val javaList: java.util.List[Int] = scalaList
javaList: java.util.List[Int] = [1, 2, 3]

코드를 어떻게 제어하느냐에 따라 달라집니다.

시작하는Scala 2.13패키지는 다음 포주를 통해 제공됩니다.Seq및 패키지의 치환scala.collection.JavaConverters/JavaConversions:

import scala.jdk.CollectionConverters._

// val scalaList: List[Int] = List(1, 2, 3)
scalaList.asJava
// java.util.List[Int] = [1, 2, 3]

꽤 오래된 질문들이지만, 제가 대답하겠지만, 대부분의 제안들은 추천되지 않습니다.

import scala.collection.JavaConversions.seqAsJavaList

val myList = List("a", "b", "c")
val myListAsJavaList = seqAsJavaList[String](myList)

갱신하다

scala 2.9.2:

import scala.collection.JavaConversions._
import scala.collection.mutable.ListBuffer
val x: java.util.List[Int] = ListBuffer( List( 1, 2, 3 ): _* )

결과

[1, 2, 3]

단일 호출의 경우 수동으로 실행하는 것이 가장 간단한 해결책일 수 있습니다.

val slist = List (1, 2, 3, 4)          
val jl = new java.util.ArrayList [Integer] (slist.size)
slist.foreach (jl.add (_))   

퍼포먼스를 측정하지 않았습니다.

상기의 제안대로 하는 것만으로 Java측에서도 불변의 리스트가 생성됩니다.제가 찾은 유일한 솔루션은 다음과 같습니다.

def toJList[T](l:List[T]):util.List[T] = {
  val a = new util.ArrayList[T]
  l.map(a.add(_))
  a
 }

Scala 2.12.0 이후 Java Conversions는 폐지되었습니다.

그래서 저에게 가장 간단한 해결책은 다음과 같습니다.

java.util.Arrays.asList("a","b","c")

언급URL : https://stackoverflow.com/questions/2429944/how-to-convert-a-scala-list-to-a-java-util-list

반응형