반응형
Java Iterable을 Scala Iterable로 어떻게 변환 할 수 있습니까?
쉽게 변환 할 수있는 방법이 있습니까?
java.lang.Iterable[_]
에
Scala.Iterable[_]
?
Scala 2.8에서는이 작업이 훨씬 쉬워졌으며이를 달성하는 방법에는 두 가지가 있습니다. 일종의 명시 적입니다 ( 암시 적을 사용 하지만 ) :
import scala.collection.JavaConverters._
val myJavaIterable = someExpr()
val myScalaIterable = myJavaIterable.asScala
편집 : 이 글을 쓴 이후로 스칼라 커뮤니티는 원거리에서 으스스한 행동을 할 가능성이 있기 때문에 JavaConverters
좋고 JavaConversions
나쁘다 는 광범위한 합의에 도달했습니다 . 따라서 전혀 사용하지 마십시오 JavaConversions
!
그리고 암시 적 암시와 더 비슷합니다. :)
import scala.collection.JavaConversions._
val myJavaIterable = someExpr()
for (magicValue <- myJavaIterable) yield doStuffWith(magicValue)
예 암시 적 변환을 사용합니다 .
import java.lang.{Iterable => JavaItb}
import java.util.{Iterator => JavaItr}
implicit def jitb2sitb[T](jit: JavaItb[T]): Iterable[T] = new SJIterable(jit);
implicit def jitr2sitr[A](jit: JavaItr[A]): Iterator[A] = new SJIterator(jit)
그러면 쉽게 구현할 수 있습니다.
class SJIterable[T](private val jitb: JavaItr[T]) extends Iterable[T] {
def elements(): Iterator[T] = jitb.iterator()
}
class SJIterator[T](private val jit: JavaItr[T]) extends Iterator[T] {
def hasNext: Boolean = jit hasNext
def next: T = jit next
}
시작 Scala 2.13
하면 package scala.jdk.CollectionConverters
는 더 이상 사용되지 않는 패키지를 대체합니다 scala.collection.JavaConverters/JavaConversions
.
import scala.jdk.CollectionConverters._
// val javaIterable: java.lang.Iterable[Int] = Iterable(1, 2, 3).asJava
javaIterable.asScala
// Iterable[Int] = List(1, 2, 3)
참조 URL : https://stackoverflow.com/questions/1072784/how-can-i-convert-a-java-iterable-to-a-scala-iterable
반응형
'programing' 카테고리의 다른 글
Localhost 용 Googlemaps API 키 (0) | 2021.01.14 |
---|---|
Windows에서 pip가 사용하는 CA 저장소에 사용자 지정 CA 루트 인증서를 추가하는 방법은 무엇입니까? (0) | 2021.01.14 |
ICommand MVVM 구현 (0) | 2021.01.14 |
스택 가비지가 Java에서 수집됩니까? (0) | 2021.01.14 |
"불법 한 정의 시작"을주는 Scala (0) | 2021.01.14 |