2012-09-05 52 views
1

刪除元素爲了避免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); 
     } 

有一個更清潔的方式?

回答

4

我認爲使用iterator並在iterator上調用remove()時匹配會做同樣的事情。

Iterator<String> supplieIter = suppliedContent.keySet().iterator(); 

    while(supplieIter.hasNext()){ 
     key = supplieIter.next(); 

     if (EqualityUtils.isMatching(rgx, key)) { 
      supplieIter.remove() 
     } 
    } 

編輯:手型代碼。可能有語法錯誤。

+0

能否請您提供一個例子嗎? – JAM

+0

http://tech.puredanger.com/2009/02/02/java-concurrency-bugs-concurrentmodificationexception/ – mellamokb

+0

謝謝Nambari。 – JAM

2

您可以使用Iterator.remove()之類

Properties suppliedContent = ... 
for (Iterator iter = suppliedContent.keySet().iterator(); iter.hasNext();) 
    if (EqualityUtils.isMatching(rgx, (String) iter.next())) 
     iter.remove(); 
+0

謝謝彼得。一如既往,偉大的回答和例子 – JAM

+0

@Jam Cheers。 ;) –