将一个List<T>集合拆分成List<List<T>>集合

2023-11-10

/**
 * 将一组数据固定分组,每组n个元素
 *
 * @param <T> 泛型对象
 * @param resList 需要拆分的集合
 * @param subListLength 每个子集合的元素个数
 * @return 返回拆分后的各个集合组成的列表
 * 代码里面用到了guava和common的结合工具类
 **/
public static <T> List<List<T>> split(List<T> resList, int subListLength) {
   if (CollectionUtils.isEmpty(resList) || subListLength <= 0) {
      return Lists.newArrayList();
   }
   List<List<T>> ret = Lists.newArrayList();
   int size = resList.size();
   if (size <= subListLength) {
      // 数据量不足 subListLength 指定的大小
      ret.add(resList);
   } else {
      int pre = size / subListLength;
      int last = size % subListLength;
      // 前面pre个集合,每个大小都是 subListLength 个元素
      for (int i = 0; i < pre; i++) {
         List<T> itemList = Lists.newArrayList();
         for (int j = 0; j < subListLength; j++) {
            itemList.add(resList.get(i * subListLength + j));
         }
         ret.add(itemList);
      }
      // last的进行处理
      if (last > 0) {
         List<T> itemList = Lists.newArrayList();
         for (int i = 0; i < last; i++) {
            itemList.add(resList.get(pre * subListLength + i));
         }
         ret.add(itemList);
      }
   }
   return ret;
}

/**
 * 将一组数据平均分成n组
 *
 * @param source 要分组的数据源
 * @param n      平均分成n组
 * @param <T>
 * @return
 */
public static <T> List<List<T>> averageAssign(List<T> source, int n) {
   List<List<T>> result = new ArrayList<List<T>>();
   int remainder = source.size() % n;  //(先计算出余数)
   int number = source.size() / n;  //然后是商
   int offset = 0;//偏移量
   for (int i = 0; i < n; i++) {
      List<T> value = null;
      if (remainder > 0) {
         value = source.subList(i * number + offset, (i + 1) * number + offset + 1);
         remainder--;
         offset++;
      } else {
         value = source.subList(i * number + offset, (i + 1) * number + offset);
      }
      result.add(value);
   }
   return result;
}

// 运行代码
public static void main(String[] args) {
   List<String> list = new ArrayList<>();
   list.add("1");
   list.add("2");
   list.add("3");
   list.add("4");
   list.add("5");
   list.add("6");
   list.add("7");
   //将一组数据平均分成n组
   List<List<String>> temps = averageAssign(list, 4);
   int j = 0;
   for (List<String> obj : temps) {
      System.out.println(String.format("row:%s -> size:%s,data:%s", ++j, obj.size(), obj));
   }

   //将一组数据固定分组,每组n个元素
   List<List<String>> temps2 = split(list, 4);
   int k = 0;
   System.err.println("====================================================================");
   System.err.println("====================================================================");
   System.err.println("====================================================================");
   for (List<String> obj : temps2) {
      System.out.println(String.format("row:%s -> size:%s,data:%s", ++k, obj.size(), obj));
   }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将一个List<T>集合拆分成List<List<T>>集合 的相关文章

随机推荐

  • python里的override(重写)

    本文翻译自Let s override 什么是override override字面理解是无效 消除的意思 在Python里两个同名的方法但执行不同程序 其中一个方法使得另外一个方法无效的 这就叫override 重写 通常情况下 父类中的
  • Unity Vuforio 导出安卓apk后摄像头识别不出物体

    可以看一下是不是场景导错了
  • Linux下查看进程、线程

    ps ef f 用树形显示进程和线程 在Linux下面好像因为没有真正的线程 是用进程模拟的 有一个是辅助线程 所以真正程序开的线程应该只有一个 ps ef f grep httpd root apache dhj ps ef f grep
  • 【IDEA】超级舒服的IDEA界面

    设置目录栏字体 设置Editor字体
  • BigDecimal的String类型

    java本身对浮点型的计算会丢失精度 这个一定要注意 必须要用BigDecimal的String类型才能解决精度的问题 BigDecimal一共有四个构造方法 我们在计算商品价格的时候 一定要用BigDecimal的String构造器才好
  • Nginx 四层代理配置模板

    worker processes 4 worker rlimit nofile 40000 events worker connections 8192 http upstream rancher server IP NODE 1 80 s
  • 阿里云服务器架构X86计算、ARM、GPU/FPGA、裸金属和超级计算集群

    阿里云服务器架构有什么区别 X86计算 ARM计算 GPU FPGA ASIC 弹性裸金属服务器 超级计算集群有什么区别 阿里云服务器网分享云服务器ECS架构详细说明 目录 阿里云服务器ECS架构说明 X86计算 ARM计算 GPU FPG
  • 文举论金:黄金原油全面走势分析策略指导。

    市场没有绝对 涨跌没有定势 所以 对市场行情的涨跌平衡判断就是你的制胜法宝 欲望 有句意大利谚语 让金钱成为我们忠心耿耿的仆人 否则 它就会成为一个专横跋扈的主人 空头 多头都能赚钱 唯有贪心不能赚 是你掌控欲望还是欲望掌控你 古人云 不积
  • win无法启动资源修复服务器,Win10修复:Windows Defender无法启动两步解决

    有些IT之家用户在升级安装Win10后 发现内置杀软Windows Defender无法正常启动 IT之家发现这类用户基本上都是从Win7升级而来 而且之前可能用过MSE 虽然MSE在正常情况下升级后会被清除 但也有清理不干净的情况 这可能
  • deepspeed训练模型报错:磁盘空间不够

    解决方法 修改huggingface缓存路径 让数据存到其它分区上 不和目录 cache 在同一分区即可 export TRANSFORMERS CACHE data0 xxx huggingface export HF HOME data
  • 我这里有一款情侣之间用来记录生活的app Android端和web端的

    我这里有一款情侣之间用来记录生活的app app下载地址 复制链接到网页下载即可 web网页端地址 当今社会 情侣之间的交流方式越来越多样化 而一款专门为情侣设计的数据共享应用程序也应运而生 这款应用程序可以帮助情侣们更好地分享彼此的生活
  • Python通过注册表获取串口列表

    工作中需要使用CameraLink接口自带的串口与设备进行通信 DALSA采集卡软件中可以将CameraLink接口里的串口映射到一个COM口 但是在使用第三方串口库 nodejs的serialport python的serial 提供的获
  • 攻防世界Web_php_unserialize

    最近开始刷攻防世界的web题目 遇到一个比较有意思的题目 ctf小白大家勿喷 访问题目链接 是一段php代码 对代码进行初步审计 发现unserialize函数 可以确定是一个php反序列化的利用 由于刚开始学习php的反序列化 对php不
  • 芯片培训的套路与Bug

    近两年 芯片培训的广告蜂拥而至 揭露某些不靠谱培训的内容也越来越多 比如说 光明日报 就在今年1月7日发表过 上4个月网课拿25万年薪 芯片培训这么神 的报道 各家自媒体 Up主对 芯片培训骗局 的揭露提醒更是不计其数 然而即使在这么多揭露
  • 用matlab进行拉普拉斯滤波,matlab拉普拉斯滤波器

    laplace 拉普拉斯 锐化 matlab 程序 部门 xxx 时间 xxx 整理范文 仅供参考 高通滤波器可以看成是 1 减去相应低通滤 波器 从低通滤波器的性质可以看出 在 用中值滤波 多维滤波 使用中心为 4 8的拉普 拉斯滤波器
  • 实现一个简单的工作流例子全过程

    test png test jpdl xml html view plain copy
  • Spring校验注解

    注解 含义 NotNull 值不能为空 Null 值必须为空 Pattern regex 字符串必须匹配正则表达式 Size 集合或者数组元素的数量必须在min和max之间 CreditCardNumber ignoreNonDigitCh
  • TensorFLow 读取图片1:初探四种从文件读取的方式

    本文记录一下TensorFLow的几种图片读取方法 官方文档有较为全面的介绍 1 使用gfile读图片 decode输出是Tensor eval后是ndarray import matplotlib pyplot as plt import
  • Python学习环境的配置

    Python学习环境的配置 0 Python学习环境 1 Anaconda的安装 2 Pycharm的安装 3 使用Jupyter notebook编程 4 使用PyCharm编程 5 Python编码中的细节问题 结语 0 Python学
  • 将一个List<T>集合拆分成List<List<T>>集合

    将一组数据固定分组 每组n个元素 param