java - Scala Iterator 与 Java Iterator 的问题(类型转换噩梦): How to cast to Java from Scala?

标签 java scala scala-java-interop

我想要完成的事情很简单: 返回包含 Tuple2 的列表作为 Java 迭代器。

代码片段是:

....public java.util.Iterator<Tuple2<Path, Text>> call(InputSplit inputSplit, java.util.Iterator<Tuple2<LongWritable, Text>> iter) throws Exception { 


    .....  java.util.List<Tuple2<Path, Text>>  elements = new java.util.ArrayList<Tuple2<Path, Text>>();
        while(iter.hasNext()){
            Tuple2<LongWritable,Text> tupled = iter.next();
            Tuple2<Path, Text> toAdd = new Tuple2<Path, Text>(file.getPath(),tupled._2);
            elements.add(toAdd);
        }
        java.util.Iterator<Tuple2<Path, Text>> it = elements.iterator();
        return it; .....}

注意:变量iter也是一个 Java 迭代器。

我得到的错误是: java.lang.ClassCastException: java.util.ArrayList$Itr cannot be cast to scala.collection.Iterator

  1. 我做错了什么? (我知道我正在使用 Tuple2 ,它适用于 Scala)。
  2. 如何返回带有 Tuple2 的 Java 迭代器或Tuple2等价?

谢谢

最佳答案

看起来您正在进行从 Java 迭代器到 Scala 迭代器的非法转换。

尝试使用scala.collection.JavaConversions 。 当您导入此隐式类时 - 这些转换将自动完成。

简而言之 -

import scala.collection.JavaConversions._

另一种选择是显式地执行此操作,假设 javaIterator 是您的 java 迭代器 -

import scala.collection.JavaConverters._
javaIterator.asScala

关于java - Scala Iterator 与 Java Iterator 的问题(类型转换噩梦): How to cast to Java from Scala?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29629763/

相关文章:

scala - 什么是 Scala 中的类型 lambda,它们有什么好处?

scala - 显式转换读取 .csv 与案例类 Spark 2.1.0

scala - 如何让gradle为自定义源集生成junit测试结果报告?

java - 在java中向scala ListBuffer添加元素

java - 如何使用 getValue(Subclass.class) 在 Firebase 中反序列化子类

java - Spring 批处理 : How to process multi-line log files

java - launch.json 参数的文档在哪里

java - Minecraft 模组出现 Missingtexture 错误

java - 从 Java 访问 scala.None

java - 不会发生 java.util.List 到 scala List 的隐式转换