为了避免ConcurrentModificationException,我采取以下措施:
List<String> tobeRemoved = new ArrayList<String>();
for (Object propertyKey : suppliedContent.keySet()) {
key = (String) propertyKey;
if (EqualityUtils.isMatching(rgx, key)) {
tobeRemoved.add(key);
}
}
for (String o : tobeRemoved) {
suppliedContent.remove(o);
}
有更清洁的方式吗?
答案 0 :(得分:4)
我认为使用iterator
并在remove()
上调用iterator
时匹配也会这样做。
Iterator<String> supplieIter = suppliedContent.keySet().iterator();
while(supplieIter.hasNext()){
key = supplieIter.next();
if (EqualityUtils.isMatching(rgx, key)) {
supplieIter.remove()
}
}
编辑:手动键入的代码。可能存在语法错误。
答案 1 :(得分:2)
您可以使用像
这样的Iterator.remove()Properties suppliedContent = ...
for (Iterator iter = suppliedContent.keySet().iterator(); iter.hasNext(); )
if (EqualityUtils.isMatching(rgx, (String) iter.next()))
iter.remove();