2015-03-31 36 views
0

新來的Groovy所以你要容易的陣列... 我得到一個錯誤,有對多頭Groovy中如何推動價值型長

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

那麼如何數組沒有push()方法我是否正確添加長整型值?使用

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

產量從指數的界定例外

+0

也許[文檔的這一部分](http://groovy-lang.org/groovy-dev-kit.html#_adding_or_removing_elements)會對您有所幫助。 – 2015-04-01 00:48:20

+0

如果有人給出了滿意的答案,你會介意分配嗎? – loteq 2015-04-15 17:38:07

回答

1

我終於實現了這一點。

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

每次有人使用'每個'來收集'數據,一隻小貓死亡! – cfrick 2015-04-01 10:02:23

+0

哈哈。但是如果沒有循環,你會如何通過條件傳遞一個值列表? – user2782001 2015-04-15 18:38:22

+1

@ user2782001過濾器又名findAll在groovy – cfrick 2015-04-15 18:56:18

5

首先讓我滿足你的第二個問題,並在JVM中數組和列表之間的較大差異:

陣列,並在Java中的列表是從零開始,這意味着第一個元素中可以找到一個[ 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[] 

但推一個元素的列表,並就像這樣,在常規風格:

myLongs << 4 

您不能追加值到一個數組,它有一個固定的大小。

+0

可以是這樣的:'ArrayList ...'就像Java的那樣會更少Groovy – roeygol 2015-04-01 11:48:02

+0

List a = []實際上會產生一個ArrayList 。列表只是一個接口 – loteq 2015-04-01 12:14:01