перебирая коллекции Scala в Java - PullRequest
16 голосов
/ 06 сентября 2010

Как я могу перебирать коллекции Scala на Java?

Ответы [ 3 ]

14 голосов
/ 06 сентября 2010

Некоторые примеры Scala

class AThing {
  @scala.reflect.BeanProperty val aList = List(1,2,3,4,99)
}

Клиент Java

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());
    }
  }
}

Вывод

jem@Respect:~/c/user/jem$ java -cp /opt/scala/lib/scala-library.jar:. UseAThing
1
2
3
4
99

Это помогает?

3 голосов
/ 06 сентября 2010

Получите Scala Iterator из коллекции и используйте преобразование из scala.collection.JavaConversions, чтобы превратить его в Java Iterator.

Вот пример:

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)

С JavaConversions, импортированным в любую заданную область, существует неявное преобразование, которое превратит любой Scala Iterator[T] в соответствующий Java Iterator<T>. В предыдущем примере явный тип объявления ji1 вызвал применение неявного преобразования инициализатора ii1. В случае ji2 указание типа на ii1 запускает преобразование.

1 голос
/ 20 сентября 2018
for(Item item: JavaConverters.seqAsJavaListConverter(seq).asJava()) {
    // Do thing with item
}
...