How I can iterating over scala collections in java?
+2
A:
Get a Scala Iterator from the collection and use a conversion from scala.collection.JavaConversions to turn it into a Java Iterator.
Here's an example:
scala> val li1 = List(2, 3, 5, 7, 11)
li1: List[Int] = List(2, 3, 5, 7, 11)
scala> val ii1 = li1.iterator
ii1: Iterator[Int] = non-empty iterator
scala> import collection.JavaConversions._
import collection.JavaConversions._
scala> val ji1: java.util.Iterator[Int] = ii1
ji1: java.util.Iterator[Int] = IteratorWrapper(non-empty iterator)
scala> val ji2 = ii1: java.util.Iterator[Int]
ji2: java.util.Iterator[Int] = IteratorWrapper(non-empty iterator)
With the JavaConversions imported into any given scope, there's an implicit conversion that will turn any Scala Iterator[T] into a corresponding Java Iterator<T>. In the preceding example, the explicit type of the ji1 declaration triggered the application of the implicit conversion of the initializer, ii1. In the ji2 case, the type ascription on ii1 triggers the conversion.
Randall Schulz
2010-09-06 00:21:49
How? I don't know use it!
isola009
2010-09-06 00:41:28
+3
A:
Some example Scala
class AThing {
@scala.reflect.BeanProperty val aList = List(1,2,3,4,99)
}
A Java client
public class UseAThing {
public static void main(String a[]) {
AThing thing = new AThing();
scala.collection.Iterator iter = thing.getAList().iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
}
}
Output
jem@Respect:~/c/user/jem$ java -cp /opt/scala/lib/scala-library.jar:. UseAThing
1
2
3
4
99
Does that help?
Synesso
2010-09-06 03:27:09