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

时间:2015-03-31 23:32:13

标签: java arrays groovy

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

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

那么如何正确追加长值呢?使用

 mylongs[mylongs.size()]=it.thisisalong  

产生超出索引范围的异常

3 个答案:

答案 0 :(得分: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

当您需要将其转换回数组时,您可以执行以下操作:

a as long[]

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

def mylongs= somebject.collect{ it.thisisalong } as long[]

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

myLongs << 4

您无法将值附加到数组中,它具有固定的大小。

答案 1 :(得分:2)

mylongs = someobject*.thisisalong as long[]

应该这样做。 *.spread operator in groovy

答案 2 :(得分:1)

我最终这样做了。

 def mylongs=[];
 somebject.each{
      //logic to chooose...
      mylongs.add(it.thisisalong as long);
 }