I have a class member list I am iterating over in following method:
public void deselectAll() {
Iterator<GraphicalObject> iterator = selectedObjects.iterator();
while(iterator.hasNext())
{
iterator.next().setSelected(false);
}
}
Method setSelected() will cause current element to be removed in subsequent calls that setSelected() triggers. Is there a way I can remove current element somewhere out of this method and continue iterating normally?
EDIT: I see question is ambiguous a bit. Here's example showing problem in context ( I left out irrelevant code):
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);
}
}
}
public abstract class AbstractGraphicalObject implements GraphicalObject {
@Override
public void setSelected(boolean selected) {
this.selected = selected;
notifySelectionListeners();
}
public void notifySelectionListeners() {
for (GraphicalObjectListener listener : listeners) {
listener.graphicalObjectSelectionChanged(this);
}
}
}