scala.List를 java.util.List로 변환하는 방법은 무엇입니까?
-
19-09-2019 - |
문제
스칼라를 변환하는 방법 scala.List
자바에 java.util.List
?
해결책
Scala List와 Java 목록은 두 개의 다른 짐승입니다. 전자는 불변이 아니고 후자는 변경할 수 있기 때문입니다. 따라서, 먼저 스칼라 목록을 돌연변이 가능한 컬렉션으로 변환해야합니다.
스칼라 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
, 마지막 줄에서 보여주는 바와 같이, 변환이 암시 적으로.
다른 팁
이것이 왜 이전에 언급되지 않은지 확실하지 않지만 가장 직관적 인 방법은 asJava
데코레이터 방법 Javaconverters 스칼라 목록에서 직접 :
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]
이전 답변을 요약하면
우리가 다음을 가지고 있다고 가정 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]
코드를 제어하는 방법은 귀하에게 달려 있습니다.
꽤 오래된 질문이지만 대답 할 것이지만 대부분의 제안은 더 이상 사용되지 않습니다.
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]
시작 Scala 2.13
, 패키지 scala.jdk.CollectionConverters
제공 asJava
포주를 통해 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]
단일 호출의 경우 손으로 수행하는 것이 가장 간단한 솔루션 일 수 있습니다.
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
}
스칼라 2.12.0 이후 JavaConversions는 더 이상 사용되지 않았습니다.
저에게 가장 간단한 해결책은 다음과 같습니다.
java.util.Arrays.asList("a","b","c")