У меня есть метод, который в качестве аргумента имеет итератор для коллекции.Внутри метода я хочу скопировать коллекцию, на которую итератор «указывает».Однако только последняя запись коллекции присутствует в копии коллекции, она присутствует 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 collection":
3
3
3
Может кто-нибудь указать мне на мою ошибку?Я не могу изменить аргументы метода, я только получаю Iterator в коллекцию, ничего не могу с этим поделать.
ОБНОВЛЕНИЕ (Ответ на несколько вопросов)
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 на каждой итерации и добавляю эту копию вцентральное собрание соседства.Это решило мою проблему.Спасибо за вашу (быструю) помощь.