在 Java 中迭代 Scala 集合

2022-09-02 13:16:14

如何在Java中迭代Scala集合?


答案 1

一些例子 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

这有帮助吗?


答案 2

从集合中获取 Scala,并使用转换从 将其转换为 Java 。Iteratorscala.collection.JavaConversionsIterator

下面是一个示例:

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)

将导入到任何给定的作用域中,会有一个隐式转换,可以将任何Scala转换为相应的Java。在前面的示例中,声明的显式类型触发了初始值设定项的隐式转换的应用。在这种情况下,on 上的类型归因会触发转换。JavaConversionsIterator[T]Iterator<T>ji1ii1ji2ii1