从groovy列表中删除特定值

时间:2013-05-24 08:33:30

标签: java groovy

我的代码片段如下所示,我想忽略/删除条件检查的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
        }

2 个答案:

答案 0 :(得分:1)

只需在处理前过滤您的列表:

def filteredList = handsetData.findAll{handset.size() > 0}

并处理过滤结果。顺便说一句,我无法理解handset身体中的each{}是什么,但我猜你有这个想法。

答案 1 :(得分:0)

这是典型的Java并发修改。

即。迭代时,您无法修改列表。

除了Cat先前早先关于在迭代之前过滤数据的建议之外,还有许多解决方案取决于您的用例的其他因素,请参阅This SO question

一个例子是保留一个无效条目的并行列表,然后在迭代完成后将它们从原始列表中删除:

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

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

listToTest.removeAll invalidItems

assert ['a', 'b', 'c'] == listToTest