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

2 に答える 2

4

マッチングの際に使っiteratorて呼びかけるのも同じだと思います。remove()iterator

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

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

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

編集:手書きのコード。構文エラーがある可能性があります。

于 2012-09-05T14:04:26.127 に答える
2

Iterator.remove()を次のように使用できます

Properties suppliedContent = ...
for (Iterator iter = suppliedContent.keySet().iterator(); iter.hasNext(); ) 
    if (EqualityUtils.isMatching(rgx, (String) iter.next())) 
        iter.remove();
于 2012-09-05T14:07:46.563 に答える