リストを繰り返しトラバースすることはできますか?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は反復可能である必要があるだけですが、なぜArrayListはできますが、パラメーターはできませんか?たくさん読んでくれてありがとう。