0

以下のようなコード スニペットがあり、条件チェックの else 部分のリストから値を無視/削除したいと考えています。offerRecords. remove(tariffOffer) が機能していないようです

offerRecords.each { tariffOffer ->

    handsetData.each { hs ->
        if (tariffOffer.HANDSET_BAND.stringValue() == hs.HANDSET_BAND?.stringValue()) {
            //println 'condition is satisfied and set the handset id ****** '
            handset.add(hs.HANDSET_PKEY_ID?.stringValue())
        }

        if (handset.size() > 0) {
            // need to call a method
            recHandset = applyHandsetRulesCHL(tariffOffer, handset)
        }
        else {
            // ignore/remove the tariffOffer
            offerRecords.remove(tariffOffer) // i know it doesn't serve the purpose
        }
4

2 に答える 2

0

これは典型的な Java 同時変更です。

つまり、反復処理中にリストを変更することはできません。

繰り返しの前にデータをフィルタリングするという Cat 氏の以前の提案に加えて、ユースケースの他の要因に応じて多くの解決策があります。 This SO questionを参照してください。

1 つの例は、無効なエントリの並列リストを保持し、反復が完了したら元のリストから削除することです。

def listToTest = ['a', 1, 'b', 'c']

def invalidItems = []
listToTest.each {
    if (it == 1)
        invalidItems << it
}

listToTest.removeAll invalidItems

assert ['a', 'b', 'c'] == listToTest
于 2013-05-24T14:39:32.683 に答える