如何在迭代到ArrayList时添加找到的项目?

时间:2013-06-07 14:54:45

标签: java arraylist

ArrayList<Persons> persList = new ArrayList<Persons>();

for(Persons p : persList){
    Persons pers = new Persons();
    pers = service.getPersons(id);
    p.setAddress(pers.getAddress());
    persList.add(pers);
}   

这是将所有找到的人添加到persList的正确方法吗?先感谢您。

1 个答案:

答案 0 :(得分:4)

不,除了通过Iterator.remove方法之外,您不应该在迭代时修改列表。除了其他任何东西,即使这个代码没有抛出异常,它也会永远存在,除非persList为空......总会有新的人来迭代!

您基本上应该创建一个新列表来收集要添加的项目,然后在最后使用addAll

ArrayList<Persons> persList = new ArrayList<Persons>();
// Populate the list, presumably
List<Persons> extraPeople = new ArrayList<Persons>();

for(Persons p : persList){
    // Note: there's no point in creating a new object only to ignore it...
    Persons pers = service.getPersons(id);
    p.setAddress(pers.getAddress());
    extraPeople.add(pers);
}

persList.addAll(extraPeople);

在我看来,这段代码仍然没有多大意义,因为你在每次迭代时通过相同的id值获取...我只能希望这是一个例子,而不是真正的代码。 / p>

另请注意,如果您的Persons课程的每个实例都是一个人,那么最好将其称为Person