gpt4 book ai didi

Scala 中的 Java 迭代器

转载 作者:行者123 更新时间:2023-12-01 20:11:07 25 4
gpt4 key购买 nike

我有一些 java 代码正在尝试转换为 scala:

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

}
}

我使用转换器来得到这个:

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")
}

}

问题是 iterator() 调用在 scala 中确实不受欢迎(我通过 Spark 执行)

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

我基本上理解他的错误所说的内容。不过,我不确定如何在 keySet.iterator() 调用上强制使用 scala.collection 的类型。

我确实这样做了:

    val iterLong: scala.collection.Iterator[Long] = toDates.keySet.iterator()

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

最佳答案

您可以从 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

关于Scala 中的 Java 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46698346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com