我想将循环中的元素添加到列表中,以便循环体也将为它们执行。我知道这种技术很常见,以防止ConcurrentModificationException
:
List<Element> thingsToBeAdd = new ArrayList<Element>();
for(Iterator<Element> it = mElements.iterator(); it.hasNext();) {
Element element = it.next();
if(...) {
//irrelevant stuff..
if(element.cFlag){
// mElements.add(new Element("crack",getResources(), (int)touchX,(int)touchY));
thingsToBeAdd.add(new Element("crack",getResources(), (int)touchX,(int)touchY));
element.cFlag = false;
}
}
}
mElements.addAll(thingsToBeAdd );
不幸的是,它没有为新元素执行循环。
编辑:
List<Element> thingsToBeAdd = new ArrayList<Element>();
for(Iterator<Element> it = mElements.iterator(); it.hasNext();) {
Element element = it.next();
if(...) {
//irrelevant stuff..
if(element.cFlag){
// mElements.add(new Element("crack",getResources(), (int)touchX,(int)touchY));
thingsToBeAdd.add(new Element("crack",getResources(), (int)touchX,(int)touchY));
element.cFlag = false;
}
}
mElements.addAll(thingsToBeAdd );
}
这将导致ConcurrentModificationException
。
答案 0 :(得分:0)
不是你在完成循环后在mElements
中添加元素
mElements.addAll(thingsToBeAdd );
答案 1 :(得分:0)
您是否尝试过CopyOnWriteArrayList
?
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/CopyOnWriteArrayList.html
答案 2 :(得分:0)
我使用递归实现了我的目标:
private List<Element> executeForEachElement(List<Element> oldList)
List<Element> newElements = new LinkedList<Element>();
for (Element elem : oldList {
newElements.addAll(generateNewElements(elem));
}
if (!newElements.isEmpty()) {
oldList.addAll(executeForEachElement(newElements));
}
return oldList;
}