我有一个类成员列表,我在下面的方法迭代:如何从另一个方法中迭代的列表中删除元素?
public void deselectAll() {
Iterator<GraphicalObject> iterator = selectedObjects.iterator();
while(iterator.hasNext())
{
iterator.next().setSelected(false);
}
}
方法的setSelected()将导致在的setSelected后续调用被移除当前元素()触发。 有没有一种方法可以从该方法中删除当前元素并继续正常迭代?
编辑:我看问题是不明确的一点。这里的例子显示方面的问题(我离开了无关紧要的代码):
public class Model {private List<GraphicalObject> selectedObjects; private final GraphicalObjectListener listener = new GraphicalObjectListener() { @Override public void graphicalObjectSelectionChanged(GraphicalObject go) { int index = selectedObjects.indexOf(go); if(go.isSelected()) { if(index == -1) { selectedObjects.add(go); } else { return; } } else { if(index != -1) { selectedObjects.remove(index); } else { return; } } notifyListeners(); } }; public void deselectAll() { Iterator<GraphicalObject> iterator = selectedObjects.iterator(); while(iterator.hasNext()){ iterator.next().setSelected(false); } }
}如果要同时删除
公共抽象类AbstractGraphicalObject实现GraphicalObject {
@Override public void setSelected(boolean selected) { this.selected = selected; notifySelectionListeners(); } public void notifySelectionListeners() { for (GraphicalObjectListener listener : listeners) { listener.graphicalObjectSelectionChanged(this); } }
}
您能举一个你期望的例子吗?也可能是https://stackoverflow.com/questions/626671/java-how-to-remove-elements-from-a-list-while-iterating-over-adding-to-it?rq=1 – Ishnark
做重复你想迭代旧的列表或删除元素的列表? –
正如我理解的问题,你可以遍历一个'selectedObjects'副本而不是直接迭代它。尽管如此,我发现用问题编写的方式来思考可能的解决方案有点困难。如果你添加了一个很好的[MCVE](https://stackoverflow.com/help/mcve),它会显示出你正在做的事情以及你为什么要求真的有必要。也可能是您遇到的这个问题实际上意味着您应该重新构建程序,而不是试图找到解决方法。 – Radiodef