引数としてコレクションへのイテレータを持つメソッドがあります。メソッド内で、イテレータが「指している」コレクションをコピーしたい。ただし、コレクション コピーには最後のコレクション エントリのみが存在し、N 回 (N は元のコレクションのサイズ) 存在します。
public void someMethod(Iterator<Node> values) {
Vector<Node> centralNodeNeighbourhood = new Vector<Node>();
while (values.hasNext()) {
Node tmp = values.next();
centralNodeNeighbourhood.add(tmp);
}
...
//store the centralNodeNeighbourhood on disk
}
「オリジナルコレクション」の例:
1
2
3
例 "centralNodeNeighbourhood コレクション":
3
3
3
誰かが私の間違いを指摘できますか? メソッドの引数を変更することはできません。イテレータをコレクションに取得するだけで、それについては何もできません。
更新 (いくつかの質問への回答)
while (values.hasNext()) {
Node tmp = values.next();
System.out.print("Adding = "+tmp.toString());
centralNodeNeighbourhood.add(tmp);
}
適切なオリジナル コレクション要素を出力します。元のコレクションがどのタイプかはわかりませんが、Iterator は std java からのものです。その方法は、
public class GatherNodeNeighboursInfoReducer extends MapReduceBase
implements Reducer<IntWritable, Node, NullWritable, NodeNeighbourhood>{
public void reduce(IntWritable key, Iterator<Node> values,
OutputCollector<NullWritable, NodeNeighbourhood> output, Reporter reporter) throws IOException {...}
}
OLD Hadoop API のメソッド (Hadoop バージョン 0.20.203.0)
解決済み 各反復で tmp オブジェクトのコピーを作成し、このコピーを centralNodeNeighbourhood コレクションに追加します。これで私の問題は解決しました。すべての(迅速な)ヘルプに感謝します。