Groovy Array.addAll方法从原始数组中删除元素

时间:2014-09-19 10:41:23

标签: java arrays groovy

好的,我确定我在这里做错了什么。

result = []
for (aMp in arMap)  {
    println("0 " + result)
    println("1 " + aMp)
    println("2 " + delegate.findSingleMap(aMp))
    result.addAll(delegate.findSingleMap(aMp))
    println "3 " + result
}
return result

println结果如下:(我在arMap中有2个元素,所以它打印4个值2次)

0 []
1 [ID:XXX, Type:4]
2 [[First:21/Nov/2013,  Type:4, error code:SXR07, ID:XXX, Test ID:5]]
3 [[First:21/Nov/2013,  Type:4, error code:SXR07, ID:XXX, Test ID:5]]
0 [[First:21/Nov/2013,  Type:4, error code:SXR07, ID:XXX, Test ID:5]]
1 [ID:YYY, Type:4]
2 [[First:12/Oct/2012,  Type:4, error code:SXR07, ID:YYY, Test ID:6]]
3 [[First:12/Oct/2012,  Type:4, error code:SXR07, ID:YYY, Test ID:6]]

正如您所看到的,findSingleMap函数正常工作,但第二次使用AddAll时,我的结果数组松开了值XXX。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

如OP中所述,评论方法findSingleMap修改了(全局)result变量。

for (aEl in map) { 
    result = result.findAll { it[aEl.key] == aEl.value } 
}

return result

不在前面编写def变量声明它(在简单脚本中)全局,这可能会导致像这样的奇怪行为。所以不要这样做,除非你必须使用codegolf。