如何使用Groovy将项添加到列表的开头?

如何使用Groovy将项添加到列表的开头?,groovy,Groovy,如何使用Groovy将项目添加到列表的开头 list.add(0, myObject); 您还可以阅读本文了解其他一些有价值的示例: 另一个选项是使用扩展运算符*,它将列表扩展为其元素: def list = [2, 3] def element = 1 assert [element, *list] == [1, 2, 3] 另一种选择是将元素放入一个列表中,并连接两个列表: assert [element] + list == [1, 2, 3]​ 你可以在这里找到更多的例子 来自G

如何使用Groovy将项目添加到列表的开头

list.add(0, myObject);
您还可以阅读本文了解其他一些有价值的示例:

另一个选项是使用扩展运算符
*
,它将列表扩展为其元素:

def list = [2, 3]
def element = 1

assert [element, *list] == [1, 2, 3]
另一种选择是将元素放入一个列表中,并连接两个列表:

assert [element] + list == [1, 2, 3]​

你可以在这里找到更多的例子

来自Groovy 2.5:

list.push( myObject )
Groovy 2.5之前的
列表。按
添加。。。但是从2.5/2.6(还没有测试版)开始,它将(似乎)预先编写“与Java保持一致”。。。实际上,
java.util.Stack.push
总是在前面加上前缀


实际上,这个
推送
方法不属于
列表
,而是属于签名
公共静态布尔推送(列表自身,T值)
。然而,由于Groovy语法的魔力,我们将如上所述编写:
list.push(myObject)

有趣的发现。问题是,为什么?Java的
list.add(n,object)
似乎完全可用。不确定我是如何看待Groovy加倍方法的(当然,除非有合理的解释)。另外,添加
addFirst
addLast
不是更有帮助吗,就像从java的
Deque
?@mikoverent,
list.plus返回添加新元素的原始列表副本(不可变操作,操作数保持不变),而
list.add
只是将元素添加到操作数list.FYI中,如果通过Groovy CP在jenkins管道中运行,那么newList.addAll(oldList)是一个更好的选项。CPS不允许使用“*”运算符
list.push( myObject )