Existe-t-il un moyen simple de convertir un
java.lang.Iterable[_]
à un
Scala.Iterable[_]
?
Existe-t-il un moyen simple de convertir un
java.lang.Iterable[_]
à un
Scala.Iterable[_]
?
En Scala 2.8 c'est devenu beaucoup plus facile, et il y a deux façons d'y parvenir. Celui qui est en quelque sorte explicite (bien qu'il utilise implicites):
import scala.collection.JavaConverters._
val myJavaIterable = someExpr()
val myScalaIterable = myJavaIterable.asScala
EDIT: Depuis que j'ai écrit, à la Scala de la communauté est parvenu à un large consensus JavaConverters
est bon, et JavaConversions
est mauvais, à cause du potentiel pour spooky action at-a-distance. Donc, ne pas utiliser JavaConversions
à tous!
Et celui qui est plus comme un implicite implicite: :)
import scala.collection.JavaConversions._
val myJavaIterable = someExpr()
for (magicValue <- myJavaIterable) yield doStuffWith(magicValue)
Oui, utilisez des conversions implicites :
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 implémenté:
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
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.