我有一些我试图转换为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()
无济于事我还可以添加什么来让迭代器返回并在循环中正常工作?
答案 0 :(得分:3)
您可以将Java从Java转换为Scala,也可以直接使用Java。
添加此导入
import collection.JavaConverters._
然后使用新的asJava
/ asScala
方法转换集合:
val iterLong: Iterator[Long] = (...).toScala
在与java集合进行互操作时,通常会执行
import java.{ util => ju }
这样可以通过ju.???
加入Java集合类型,而不必担心命名冲突。通过上面的导入范围,写下
val iterLong: ju.Iterator[Long] = ... // or let type inference do it for you
并使用Java API