2013-08-28 22 views
1

想象我有一個大名單我想分裂,以更小的塊進行處理:Groovy的方式找到了一系列的有效結束

def chunkSize = 10 
def listSize = aBigList.size() 
for(def i = 0; i < listSize; i += chunkSize) { 
    def startOfRange = i 
    def endOfRange = (listSize - 1) < (i + increment - 1) ? (listSize - 1) : (i + increment - 1) // There has got to be a better way! 
    def chunk = aBigList[startOfRange..endOfRange] 
    // do something with chunk 
} 

用於獲取endOfRange變量的代碼是醜陋和不時髦,但是爲了防止發生異常,需要這樣做。有一個更好的方法嗎?

回答

4

難道你不能使用collate

def chunks = aBigList.collate(chunkSize) 

如果沒有,修復您的代碼會是這樣的:

def chunkSize = 10 
def listSize = aBigList.size() 
for(i = 0; i < listSize; i += chunkSize) { 
    def endOfRange = i + chunkSize - 1 >= aBigList.size() ? -1 : i + chunkSize - 1 
    def chunk = aBigList[ i..endOfRange ] 
    // do something with chunk 
} 

但整理可能是要走的路,只要aBigList並不是真正意義上的巨大;-)

+0

輕鬆點!謝謝! – ubiquibacon

相關問題