Scala中的Java迭代器

时间:2017-10-11 22:11:33

标签: java scala

我有一些我试图转换为scala的java代码:

Bramka

我使用转换器来获取此信息:

package hello;

class HelloWorldApp {
    public static void main(String[] args) {
            public SortedMap<Long, Long> toDates = new TreeMap<>();

            Iterator<Long> iterLong = toDates.keySet().iterator();
            while( iterLong.hasNext() )
            {
                System.out.println("TEST");
            }

    }
}

问题是在scala中我不喜欢iterator()调用(我通过spark执行)

package hello

//remove if not needed
import scala.collection.JavaConversions._

object HelloWorldApp {

  def main(args: Array[String]): Unit = {
    val toDates: SortedMap[Long, Long] = new TreeMap[Long, Long]()
    val iterLong: Iterator[Long] = toDates.keySet.iterator()
    while (iterLong.hasNext) println("TEST")
  }

}

我基本上理解他的错误。虽然,我不知道如何在keySet.iterator()调用上强制使用scala.collection类型。

我这样做了:

<console>:190: error: type mismatch;
 found   : java.util.Iterator[Long]
 required: scala.collection.Iterator[Long]
                         val iterLong: Iterator[Long] = toDates.keySet.iterator()

无济于事我还可以添加什么来让迭代器返回并在循环中正常工作?

1 个答案:

答案 0 :(得分:3)

您可以将Java从Java转换为Scala,也可以直接使用Java。

转换

添加此导入

import collection.JavaConverters._

然后使用新的asJava / asScala方法转换集合:

val iterLong: Iterator[Long] = (...).toScala

直接使用Java类型

在与java集合进行互操作时,通常会执行

import java.{ util => ju }

这样可以通过ju.???加入Java集合类型,而不必担心命名冲突。通过上面的导入范围,写下

val iterLong: ju.Iterator[Long] = ... // or let type inference do it for you

并使用Java API