Groovy如何将值推送到long类型的数组

use*_*001 0 java arrays groovy

groovy的新手,所以请轻松一点......我得到一个错误,即long的数组没有push()方法

def mylongs=[] as long[];
somebject.each{
     //logic to chooose...
     mylongs.push(it.thisisalong);
}
Run Code Online (Sandbox Code Playgroud)

那么如何正确附加长值呢?运用

 mylongs[mylongs.size()]=it.thisisalong  
Run Code Online (Sandbox Code Playgroud)

产生超出索引范围的异常

Lui*_*ñiz 5

首先让我解决你的第二个问题,以及JVM中数组和列表之间的较大差异:

Java中的数组和列表是基于0的,这意味着第一个元素可以在[0]中找到,最后一个元素可以在[a.size() - 1]中找到.元素a [a.size()]超出了数组的范围,这就是您的异常告诉您的内容.

在groovy中你可以使用a.last(),如果你想获取数组/列表的最后一个元素,在我看来它更具可读性和不言自明.

如果在填充之前将mylongs转换为数组,那么您已经修复了数组的大小,并且可以不再向其中推送对象.如果您的数组具有可变大小,则需要使用List.

List<Long> a=[]

a << 1 as long
a << 2 as long
Run Code Online (Sandbox Code Playgroud)

等等

当您需要将其转换回数组时,您可以这样做:

a as long[]
Run Code Online (Sandbox Code Playgroud)

现在回答第一个问题,其他人几乎给了你一个有效的答案,但在groovy风格,我写(假设somebject是某种类型的集合):

def mylongs= somebject.collect{ it.thisisalong } as long[]
Run Code Online (Sandbox Code Playgroud)

但是将一个元素推入List并以这样的方式完成,以groovy风格:

myLongs << 4
Run Code Online (Sandbox Code Playgroud)

您不能将值附加到数组中,它具有固定的大小.