我可以一次又一次地使用可迭代遍历列表吗?当我使用 ArrayList 时,我可以在“foreach”中一次又一次地遍历列表,但是当我在 hadoop(分布式计算框架)中的函数中使用 iterable 作为参数时,只有第一次我可以遍历 iterable,当我再次使用 foreach ,它什么都没有。前任:
public void reduce(Text key, Iterable<Text> values, Context context)
throws IOException, InterruptedException {
float all=0;
String resultKey;
float resultValue;
ArrayList<String> valuelist=new ArrayList<String>();
for (Text text : values) {
valuelist.add(text.toString());
}
for (String text : valuelist) {
String[] contents=text.toString().split(" ");
if(contents.length==1)
{
all=Float.parseFloat(contents[0]);
break;
}
}
if(all==0)
{
return;
}
for (String text : valuelist) {
String[] contents=text.toString().split(" ");
if(contents.length>1)
{
resultKey=contents[0]+" "+key.toString();
resultValue=Float.parseFloat(contents[1])/all;
context.write(new Text(resultKey), new Text(resultValue+""));
}
}
}
-----我必须先将它保存在ArrayList中......在我的理解中,foreach只需要一个iterable,为什么ArrayList可以,但参数不能?感谢您阅读这么多。