2014-09-19 3 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

+0

@talex только что добавил. Мне было интересно, если результат сброшен до начала следующего цикла, и я добавил печать – SeraphimFoA

+1

, ваш 'findSingleMap' также работает с переменной' result'? Использование упрощенной версии вашего кода отлично подходит для меня (groovy 2.2.1) и 'addAll' работает как рекламируется. – cfrick

ответ

1

Как указано OP int в комментариях, метод findSingleMap изменяет переменную result.

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

return result 

Не писать def перед переменной объявляет его (в простых сценариях) глобальные, что может привести к странному поведению, как это. Так что не делайте этого, если только вам не придется переубеждать.

Смежные вопросы