Как скопировать список в Groovy

У меня есть следующий список Groovy:

l = [1, 2, 3]
println(l)

Что дает мне:

[1, 2, 3]

Теперь я хочу создать копию этого списка:

println(l*.collect())

Но это дает мне следующее:

[[1], [2], [3]]

По-видимому, у меня есть список списков.
Как создать список тех же объектов, что и в исходном списке?

Ответ 1

Вы используете оператор спреда (*), который делает список из каждого элемента. Удалите это:

list1 = [1, 2, 3]
println list1

list2 = list1.collect()
assert list2 == [1, 2, 3]

Ознакомьтесь с документом для получения дополнительной информации об этом методе.

Ответ 2

def list = [1, 2, 4]

//by value
def clonedList = list.clone() //or list.collect()
assert clonedList == list
assert !clonedList.is(list) //Reference inequality

list.pop() //modify list

assert clonedList == [1, 2, 4]
assert list == [1, 2]

//by reference
def anotherList = list
assert anotherList == [1, 2]
assert anotherList.is(list) //Reference equality

list.pop() //modify again

assert list == [1]
assert anotherList == [1]

Запустите здесь.

Ответ 3

Вы также можете использовать

list1 = [1, 2, 3]
println list1

list2 = list1.collect{it}
assert list2 == [1, 2, 3]