我有一個類成員列表,我在下面的方法迭代:如何從另一個方法中迭代的列表中刪除元素?
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