Iterating over Java collections in Scala
As of Scala 2.8, all you have to do is to import the JavaConversions object, which already declares the appropriate conversions.
import scala.collection.JavaConversions._
This won't work in previous versions though.
Edit: Scala 2.13.0 deprecates scala.collection.JavaConverters
, so since 2.13.0 you need to use scala.jdk.CollectionConverters
.
Scala 2.12.0 deprecates scala.collection.JavaConversions
, so since 2.12.0 one way of doing this would be something like:
import scala.collection.JavaConverters._// ...for(k <- javaCollection.asScala) { // ...}
(notice the import, new is JavaConverters, deprecated is JavaConversions)
There is a wrapper class (scala.collection.jcl.MutableIterator.Wrapper
). So if you define
implicit def javaIteratorToScalaIterator[A](it : java.util.Iterator[A]) = new Wrapper(it)
then it will act as a sub class of the Scala iterator so you can do foreach
.