2013-08-28 3 views
1

Imaginez que j'ai une grande liste que je veux diviser pour petits morceaux pour le traitement:manière Groovy trouver fin valide d'une gamme

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 
} 

Le code pour obtenir la variable endOfRange est laid et non groovy , mais est nécessaire pour empêcher une exception Index Out of Bounds. Y a-t-il une meilleure manière de faire cela?

Répondre

4

Vous ne pouvez pas utiliser collate?

def chunks = aBigList.collate(chunkSize) 

Sinon, fixer votre code vous donne quelque chose comme:

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 
} 

Mais colliger est probablement la voie à suivre tant que aBigList n'est pas vraiment énorme ;-)

+0

points faciles ! Merci! – ubiquibacon

Questions connexes