Groovy中如何将列表均衡分割为4个子列表(无额外子列表)
列表均衡分割为4个子列表的解决方案
当使用collate(localities.size().intdiv(4))处理无法被4整除的列表时,剩余元素会单独形成额外子列表。要实现仅生成4个子列表并将余数均衡分配,可按以下方式实现:
实现代码
def totalSize = localities.size() def baseSize = totalSize.intdiv(4) def remainder = totalSize % 4 def sublists = [] int currentPos = 0 // 分配带余数的子列表(前remainder个各多1个元素) for (int i = 0; i < remainder; i++) { sublists.add(localities.subList(currentPos, currentPos + baseSize + 1)) currentPos += baseSize + 1 } // 分配剩余基础大小的子列表 for (int i = remainder; i < 4; i++) { sublists.add(localities.subList(currentPos, currentPos + baseSize)) currentPos += baseSize } // 输出验证 for(sublist in sublists){ println(sublist.join(',')) println "next" }
逻辑说明
baseSize:总元素数整除4得到的基础子列表大小,比如163个元素时为40remainder:总元素数除以4的余数,163时为3,意味着前3个子列表各多1个元素(即41个),最后1个为40个- 通过分两次遍历,先处理需要多分配元素的子列表,再处理基础大小的子列表,确保最终仅生成4个子列表,且元素分配均衡
内容的提问来源于stack exchange,提问作者deewreck
相关产品推荐
相关产品推荐

