我想要完成的事情很简单: 返回包含 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
- 我做错了什么? (我知道我正在使用
Tuple2
,它适用于 Scala)。 - 如何返回带有
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/