Как скопировать список в 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]