【杂记】java 大集合进行拆分

日常中需要对一个大的集合进行拆分成多个小集合,其主要思路为:

  1. 设置需要拆分多少个小集合 A
  2. 大集合里面有多少条数据 B
  3. 计算出每个集合里面有多个条数据 C=B/A
  4. 计算出看是否存在余数 D=B%A
  5. 采用集合(List.subList())的方法对大集合进行拆分,循环A变进行集合拆分(List.subList((A-1)*C,(A-1)*C+(C-1))
  6. 如果存在余数D,则需要将剩余的数据放在一个集合中 (List.subList((AC,AC+D)

代码如下:

java 复制代码
 /**
     * 集合切分(将一个1002大小的集合,拆分为5个小集合)
     * @param list 目标集合
     * @param partitionSize 需要拆分集合的个数
     * @param <T> 泛型对象
     * @return 切分后的总的集合
     */
    public static <T> List<List<T>> listPartition(List<T> list, int partitionSize) {
        //①如果集合时空的或者初始设置的集合大小小于等于0,返回一个新集合
        if (list.isEmpty() || partitionSize <= 0) {
            return new ArrayList();
        }
        //②封装最后返回的结果集的集合
        List<List<T>> listResult = new ArrayList<>();
        int size = list.size();
        //③如果目标集合的大小小于设置集合的大小,将目标集合,全部加载到封装结果集中,返回结束
        if (size <= partitionSize) {
            listResult.add(list);
            return listResult;
        }
        //④计算出拆分的集合的大小(size =1002, partitionSize= 5  partitionNum =200 partitionRemainder=2)
        int partitionNum = size / partitionSize;
        //⑤计算出最后一个拆分集合的大小
        int partitionRemainder = size % partitionSize;
        for (int a = 1; a <= partitionSize; a++) {
            //⑥对目标集合进行截取 ((1-1)*200,((1-1)*200)+(200-1))
            List<T> ts = list.subList((a - 1) * partitionNum, ((a - 1) * partitionNum) + (partitionNum - 1));
            listResult.add(ts);
        }
        //⑦如果最后一个拆分集合的大小大于0
        if (partitionRemainder > 0) {
            //⑧对目标集合进行截取 ((200*5,200*5+2)
            List<T> ts = list.subList(partitionNum * partitionSize, partitionNum * partitionSize + partitionRemainder);
            listResult.add(ts);
        }
        //⑨返回结果集
        return listResult;
    }
相关推荐
SL_staff1 小时前
从邮箱传文档到协同流重构:企业文档协作的系统性破局实践
java·开源·github
smallyoung3 小时前
告别N+1:Spring Boot 一键数据翻译框架体系
java·后端·架构
Bazingga4 小时前
Java16 record 完整拆解——语法、语义、限制、反射
java·后端
SL_staff6 小时前
规则联动:给工厂装上‘自动化神经反射弧’——JVS·物联网平台规则引擎实战教程
java·人工智能·物联网
骑着蜗牛撵大象3276 小时前
Linux 进程间通信之管道:从 pipe() 的内核语义到 FIFO 落地排错
android·java·linux·系统编程·fifo·管道·进程间通信
WJ.Polar6 小时前
Java封装、继承、多态
java·开发语言
ly76896 小时前
PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
java·数据库·postgresql·pitr·pg_basebackup·wal 归档
摇滚侠6 小时前
Java 中如何表示负数,有符号和无符号的区别,补码的计算规则,char byte short int long 的范围
java·开发语言
奇牙coding7 小时前
Codex CLI 升级后多文件编辑静默失效:config.yaml 枚举变更排查与修复指南
java·前端·javascript·ai
小羊没烦恼!7 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp