2014-09-19 246 views
0

好吧,我确定我在这里做错了什么。Groovy Array.addAll方法从原始数组中删除元素

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的结果如下:(我有2个元素arMap,所以它打印四个值的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。

我在做什么错?

+0

你不是所有的代码。从0开始的字符串是从哪里来的? – talex 2014-09-19 10:44:07

+0

@talex刚添加。我想知道如果结果在下一个周期开始之前重置,并且我添加了print – SeraphimFoA 2014-09-19 10:44:51

+1

,您的'findSingleMap'是否也可以使用变量'result'?使用你的代码的简化版本适用于我(groovy 2.2.1),并且'addAll'按照广告的方式工作。 – cfrick 2014-09-19 11:20:08

回答

1

正如OP int所述,方法findSingleMap修改了(全局)result变量。

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

return result 

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