在精简器中的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的数组或实例”。如何在相同的地方使用循环?

最佳答案

试试这个。

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

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

    };

10-06 07:49