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

Dee*_*pti 37 groovy

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

bez*_*max 42

list.add(0, myObject);
Run Code Online (Sandbox Code Playgroud)

您还可以阅读其他一些有价值的示例:http: //groovy.codehaus.org/JN1015-Collections


hel*_*hod 18

另一种选择是使用扩展运算符*将列表扩展为其元素:

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

assert [element, *list] == [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

另一种方法是将元素放入列表并连接两个列表:

assert [element] + list == [1, 2, 3]?
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,如果通过Groovy CPS在詹金斯管道中运行,那么newList.addAll(oldList)是一个更好的选择。CPS不会容忍“ *”运算符 (2认同)

mik*_*ent 8

警告!

从 Groovy 2.5 开始:

list.push( myObject )
Run Code Online (Sandbox Code Playgroud)

在 Groovy 2.5list.push 附加之前......但从 2.5/2.6(尚未测试版)开始,它(似乎)会预先添加,“与 Java 保持一致”......实际上,java.util.Stack.push总是预先添加.

其实这个push方法不属于List,而是属于GDK 2.5 DefaultGroovyMethods,签名<T> public static boolean push(List<T> self, T value)。然而,由于 Groovy 语法魔法,我们将如上编写:list.push( myObject ).


Mar*_*dya 5

def list = [4, 3, 2, 1, 0]

list.plus(0, 5)

assert list == [5, 4, 3, 2, 1, 0]
Run Code Online (Sandbox Code Playgroud)

您可以在此链接中找到更多示例

  • @mikerodent,“list.plus”返回添加了新元素的原始列表的副本(不可变操作,操作数保持不变),而“list.add”只是将元素添加到操作数列表中。 (3认同)
  • 有趣的发现。问题是,嗯,为什么?Java 的 `list.add( n, object )` 看起来非常有用。不确定我对 Groovy 加倍方法的看法(当然除非有合理的解释)。另外,像 java 的“Deque”一样添加“addFirst”和“addLast”不是更有帮助吗? (2认同)