当前位置: 首页 > news >正文

Java guava partition方法拆分集合自定义集合拆分方法

日常开发中,经常遇到拆分集合处理的场景,现在记录2中拆分集合的方法。

1. 使用Guava包提供的集合操作工具栏 Lists.partition()方法拆分

 首先,引入maven依赖

<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>21.0</version>
</dependency>

 部分源码

public static <T> List<List<T>> partition(List<T> list, int size) {Preconditions.checkNotNull(list);Preconditions.checkArgument(size > 0);return (List)(list instanceof RandomAccess ? new Lists.RandomAccessPartition(list, size) : new Lists.Partition(list, size));}

 Lists.partition方法,根据传入的size,对list进行拆分

使用Demo

 public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);list.add(6);list.add(7);List<List<Integer>> partition = Lists.partition(list, 3);partition.forEach(l -> System.out.println(JSONObject.toJSONString(l)));
}
2. 自定义集合拆分方法partition

使用List的 subList方法自定义集合拆分

   /*** 分割集合** @param list  原集合* @param count 分割后,每个集合大小* @return java.util.List<java.util.List<T>>**/public static <T> List<List<T>> partition(List<T> list, int count) {List<List<T>> result = new ArrayList<>();int total = list.size();int pageSize = total % count == 0 ? total / count : total / count + 1;for (int i = 0; i < pageSize; i++) {int start = i * count;int end = Math.min((start + count), total);List<T> ts = list.subList(start, end);result.add(ts);}return result;}

使用Demo

public static void main(String[] args) {List<String> strList = new ArrayList<>();strList.add("一月");strList.add("二月");strList.add("三月");strList.add("四月");strList.add("五月");strList.add("六月");strList.add("七月");strList.add("八月");strList.add("九月");strList.add("十月");strList.add("十一月");List<List<String>> listList = partition(strList, 3);listList.forEach(l -> System.out.println(JSONObject.toJSONString(l)));}

输出结果

http://www.lryc.cn/news/269738.html

相关文章:

  • GLTF编辑器-位移贴图实现破碎的路面
  • 多维时序 | MATLAB实现SSA-BiLSTM麻雀算法优化双向长短期记忆神经网络多变量时间序列预测
  • docker安装Nacos和Rabbitmq
  • Android MVC 写法
  • 网络层解读
  • js for和forEach 跳出循环 替代方案
  • 如何使用ArcGIS Pro自动矢量化建筑
  • 交互式笔记Jupyter Notebook本地部署并实现公网远程访问内网服务器
  • 41.坑王驾到第七期:uniapp开发微信小程序引用组件时报错!
  • 挂载与解挂载
  • UGUI Panel的显示和隐藏优化
  • Linux:多文件编辑
  • 模式识别与机器学习-概率图模型
  • RK3566 ANDROID 11 平台上适配移远EC200A
  • 存算分离降本增效,StarRocks 助力聚水潭 SaaS 业务服务化升级
  • Linux 内核学习笔记: hlist 的理解
  • 几种设计模式介绍
  • 拓展操作(三) jenkins迁移到另一个机器
  • 重定向和转发的区别
  • 基于ElementUI二次封装弹窗组件
  • linux cat命令改变功能显示当前文件行号
  • Django-REST-Framework 如何快速生成Swagger, ReDoc格式的 REST API 文档
  • SpringBoot当中的Singleton和Prototype详解
  • LeetCode第1题 - 两数之和
  • (14)Linux 地址空间的理解
  • Java中的设计模式
  • Hadoop(2):常见的MapReduce[在Ubuntu中运行!]
  • Unity | 快速修复Animation missing错误
  • ssm基于web的志愿者管理系统的设计与实现+vue论文
  • C++运算符重载(插入and提取)