1

想象一下,我有一个很大的列表,我想分成更小的块进行处理:

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变量的代码是丑陋且非常规的,但为了防止Index Out of Bounds异常是必需的。有一个更好的方法吗?

4

1 回答 1

4

你不能使用collat​​e吗?

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不是真正的巨大;-)

于 2013-08-28T14:34:55.767 回答