在化简器中的 for 循环中获取编译错误"Can only iterate over an array or an instance of java.lang.Iterable"



在reducer中的for循环中获取编译错误"只能迭代数组或java.lang.Iterable的实例"。

public void reduce(Text key, Iterator<IntWritable> values,
            OutputCollector<Text, IntWritable> Output, Reporter arg3)
            throws IOException {
        // TODO Auto-generated method stub
        int sum = 0;
         for (IntWritable val : values) {
           sum += val.get();

上面的代码中,在 "for (IntWritable val : values)" 处收到编译错误"只能迭代数组或 java.lang.Iterable 的实例"。如何在同一个中使用循环?

要么将Iterable<IntWritable>而不是Iterator<IntWritable>传递给方法,要么使用 hasNext()next() 遍历Iterator的元素:

 while (values.hasNext()) {
    IntWritable val = values.next();
    ...
}

试试这个。

    for (IntWritable val : (Iterable<IntWritable>)() -> values) {
        sum += val.get();
        ....

(Iterable<IntWritable>)() -> values相当于

    new Iterable<IntWritable>() {
        @Override
        public Iterator<IntWritable> iterator() {
            return values;
        }
    };

相关内容

最新更新