est-il un moyen facile de convertir unComment convertir un Iterable Java en Scala Iterable?
java.lang.Iterable[_]
à un
Scala.Iterable[_]
?
est-il un moyen facile de convertir unComment convertir un Iterable Java en Scala Iterable?
java.lang.Iterable[_]
à un
Scala.Iterable[_]
?
Dans Scala 2.8 cela est devenu beaucoup plus facile, et il y a deux façons d'y parvenir. Celui qui est un peu explicite (bien qu'il utilise implicits):
import scala.collection.JavaConverters._
val myJavaIterable = someExpr()
val myScalaIterable = myJavaIterable.asScala
EDIT: Depuis que j'ai écrit cela, la communauté Scala est parvenue à un large consensus JavaConverters
est bon, et JavaConversions
est mauvais, parce que du potentiel de l'effrayante action à distance. Donc, ne pas utiliser JavaConversions
du tout!
Et qui est plus comme un implicite implicite: :)
import scala.collection.JavaConversions._
val myJavaIterable = someExpr()
for (magicValue <- myJavaIterable) yield doStuffWith(magicValue)
Oui utiliser implicites conversions:
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)
qui peut ensuite être facilement mis en œuvre:
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
}
Merci, j'espérais qu'il y avait quelque chose comme ça dans les libs standards Scala, mais comme vous » Comme on l'a montré, ce n'est pas trop dur de rouler le vôtre. –
Il est ridicule de penser combien de code cela aurait été l'inverse! –
Ce sera dans la bibliothèque standard commençant par Scala 2.8. –