带有对象的ArrayList

Spa*_*tel 0 java

我有一个ArrayList,里面填充了名为projectsCurrent的对象"Project".每个项目都有自己的名字,州,manDays等.

我想遍历这个列表和每个项目检查if (manDaysDone >= manDays).如果确实如此,那么比项目完成并且我想要更改其状态,将其从列表中删除并将其添加到另一个(projectsDone).

当我尝试使用Iterator来实现我的目标时,似乎在迭代中丢失了当前项目的链接,例如,在此代码中,NoSuchElementException在if条件中引发了一个:

Iterator<Project> i = projectsCurrent.iterator();
while (i.hasNext()){
    if (i.next().getManDaysDone() >= i.next().getManDays()){
        i.next().setState(ProjectState.DONE);
    } 
}
Run Code Online (Sandbox Code Playgroud)

只是为了弄清楚我想要实现的目标.以下for循环完成了这项工作,但当然后来我得到了ConcurrentModificationException:

for (Project currentProject : projectsCurrent){
    if (currentProject.getManDaysDone() >= currentProject.getManDays()) {
        currentProject.setState(ProjectState.DONE);
        projectsDone.add(currentProject);
        this.budget += currentProject.getPrice();
        projectsCurrent.remove(currentProject);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ren*_*ink 5

next在循环中调用了三次.每个next都会向前移动迭代器.我猜这导致了NoSuchElementException

  while (i.hasNext()){
        Project project = i.next();
        if (project.getManDaysDone() >= project.getManDays()){
            project.setState(ProjectState.DONE);
        } 
    }
Run Code Online (Sandbox Code Playgroud)