groovy的新手,所以放轻松...... 我得到一个错误,即long的数组没有push()方法
def mylongs=[] as long[];
somebject.each{
//logic to chooose...
mylongs.push(it.thisisalong);
}
那么如何正确追加长值呢?使用
mylongs[mylongs.size()]=it.thisisalong
产生超出索引范围的异常
答案 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);
}