如何在Groovy中复制列表

如何在Groovy中复制列表,groovy,Groovy,我有以下Groovy列表: l = [1, 2, 3] println(l) 这给了我: [1, 2, 3] 现在我要创建此列表的副本: println(l*.collect()) 但这给了我以下信息: [[1], [2], [3]] 显然我有一张名单。 如何创建与原始列表中相同对象的列表?您正在使用扩展运算符(*),该运算符将每个元素组成一个列表。删除: list1 = [1, 2, 3] println list1 list2 = list1.collect() assert li

我有以下Groovy列表:

l = [1, 2, 3]
println(l)
这给了我:

[1, 2, 3]
现在我要创建此列表的副本:

println(l*.collect())
但这给了我以下信息:

[[1], [2], [3]]
显然我有一张名单。

如何创建与原始列表中相同对象的列表?

您正在使用扩展运算符(
*
),该运算符将每个元素组成一个列表。删除:

list1 = [1, 2, 3]
println list1

list2 = list1.collect()
assert list2 == [1, 2, 3]
有关该方法的更多信息

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]
运行它。

您也可以使用

list1 = [1, 2, 3]
println list1

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

这不仅是最彻底的答案,也是最简单的答案:使用list.cone()克隆列表用于检查克隆副本是否与原始副本唯一。唯一的问题是,如果原始列表是不可变的,那么克隆也是不可变的。*。将该方法应用于列表的每个成员,并返回这些修改元素的列表,我认为这不是您想要的。