Java - 将 List 等分(最后一部分处理多余部分)
背景
今天由于要使用多线程,所以事先需要确定启动线程个数。于是需要先将集合进行分配,确定线程的个数。
解决方案
首先是实现
public static <T> List<List<T>> splitList(List<T> list, int blockSize) { List<List<T>> lists = new ArrayList<List<T>>(); if(blockSize == 1){ lists.add(list); return lists; } if (list != null && blockSize > 0) { int listSize = list.size(); if(listSize<=blockSize){ lists.add(list); return lists; } int batchSize = listSize / blockSize; int remain = listSize % blockSize; for (int i = 0; i < batchSize; i++) { int fromIndex = i * blockSize; int toIndex = fromIndex + blockSize; System.out.println("fromIndex=" + fromIndex + ", toIndex=" + toIndex); lists.add(list.subList(fromIndex, toIndex)); } if(remain>0){ System.out.println("fromIndex=" + (listSize-remain) + ", toIndex=" + (listSize)); lists.add(list.subList(listSize-remain, listSize)); } } return lists; }
其次是调用
List<List<String>> sublists = splitbList(transNoList, nCount/ThreadCount);
我们可以看到,返回的结构List<List<T>>的每一个元素都是一个list对象,即每一个分配好的小集合 :)
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现