Java拆分集合

在对数据进行批量操作的时候,由于数据量太大,需要对数据进行拆分操作,分成N个小集合。

代码如下:

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;/*** 拆分集合** @author HY* @date 2023/11/21*/
public class SplitListUtils {/*** 拆分集合* <p>* 拆分方式有多种,示例代码如下;** <pre>* List<T> subItemList = null;* // 根据批次数遍历数据* for (int i = 0; i < batchCount; i++) {*     // 方式一:*     //if (i == batchCount - 1) {*     //    itemList = list.subList(subListLength * i, dataSize);*     //} else {*     //    itemList = list.subList(subListLength * i, subListLength * (i + 1));*     //}*     //newList.add(itemList);**     // 方式二:*     int start = i * subListLength;*     int end = Math.min(start + subListLength, dataSize);**     subItemList = list.subList(start, end);**     newList.add(subItemList);* }* </pre>** @param <T>           泛型对象* @param list          需要拆分的集合* @param subListLength 每个子集合的元素个数* @return 返回拆分后的各个集合组成的列表**/public static <T> List<List<T>> split(List<T> list, int subListLength) {List<List<T>> newList = new ArrayList<>();if (CollUtil.isEmpty(list) || subListLength <= 0) {return newList;}int dataSize = list.size();if (dataSize <= subListLength) {// 数据量不足 subListLength 指定的大小newList.add(list);return newList;}// 批次处理数(结果向上取整)int batchSize = (int) Math.ceil(1.0 * dataSize / subListLength);return IntStream.range(0, batchSize).mapToObj(index -> getList(list, subListLength, dataSize, index)).collect(Collectors.toList());}private static <T> List<T> getList(List<T> list, int subListLength, int dataSize, int index) {int start = index * subListLength;int end = Math.min((index + 1) * subListLength, dataSize);return list.subList(start, end);}public static void main(String[] args) {int size = 10000009;List<String> list = IntStream.range(0, size).mapToObj(index -> "hello:" + index).collect(Collectors.toList());// 大集合里面包含多个小集合long beginTime = System.nanoTime();List<List<String>> temps = split(list, 100);System.out.println("耗时:" + (System.nanoTime() - beginTime));int j = 0;// 对大集合里面的每一个小集合进行操作for (List<String> obj : temps) {System.out.println(StrUtil.format("row:{}, size:{}", ++j, obj.size()));}}
}

执行平均时间:≈15ms

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/198549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java多线程学习- 下

六. 线程管理 6.1 线程组 类似于在计算机中使用文件夹管理文件, 也可以使用线程组来管理线程,在线程组中定义一组相似(相关)的线程. 在线程组中也可以定义子线程组, Thread 类有几个构造方法允许在创建线程时指定线程组,如果创建线程时没有指定线程组则该线程就属于浮现出所在…

STM32-新建工程(标准库)

目录 STM32F10x新建工程&#xff08;标准库&#xff09; 移植文件夹 新建工程 添加启动文件和必需文件 在工程中加载新添加的文件 在工程中添加文件路径 在工程中添加main函数 添加lib库 添加必需文件 添加宏定义 STM32F10x新建工程&#xff08;标准库&#xff09; …

【Python】创建简单的Python微服务Demo与FastAPI

创建简单的Python微服务Demo与FastAPI 在微服务架构中&#xff0c;通过FastAPI框架创建一个简单的Python微服务Demo涉及多个步骤&#xff0c;包括定义服务、使用框架、进行通信等。在这篇文章中&#xff0c;我们将使用FastAPI框架创建两个简单的微服务&#xff0c;它们通过RES…

HBase安装配置:一键自动安装配置

使用shell脚本一键下载、安装、配置HBase&#xff08;单机版&#xff09; 1. 把下面的脚本复制保存为/tmp/install_hbase.sh文件 #!/bin/bash# 安装之前确保安装目录有写入权限&#xff0c;若没有&#xff0c;自行增加 # 安装版本 zk_version"2.4.8" # 安装目录 zk…

【WxPusher】消息推送小案例

提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 WxPusher后台 WxPusher文档 一、注册WxPusher 进入后台获取你的token 二、使用步骤 1.编写脚本 参数如下&#xff08;示例&#xff09;&#xff1a; {"appToken": "AT_AnXubGNGCe7OVN…

基于Java SSM企业用电管理系统

企业用电管理系统是供电部门对所辖区域的企业用电进行管理的系统&#xff0c;假设企业全部采用分时电表&#xff0c;分谷(低谷时段)、峰(高峰时段)时段分别计量。系统涉及的信息及操作有&#xff1a; 用电企业&#xff1a;用电企业编号、用电企业名、地址、电话、联系人等。 电…

基于springboot的校园二手市场

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

Redis skiplist源码解析(支持范围查询)

跳表是一个多层的有序链表&#xff0c;在跳表中进行查询操作时&#xff0c;查询代码可以从最高层开始查询。层数越高&#xff0c;结点数越少&#xff0c;同时高层结点的跨度会比较大。因此&#xff0c;在高层查询结点时&#xff0c;查询一个结点可能就已经查到了链表的中间位置…

LeetCode:2477. 到达首都的最少油耗(DFS C++、Java)

目录 2477. 到达首都的最少油耗 题目描述&#xff1a; 实现代码与解析&#xff1a; dfs 2477. 到达首都的最少油耗 题目描述&#xff1a; 给你一棵 n 个节点的树&#xff08;一个无向、连通、无环图&#xff09;&#xff0c;每个节点表示一个城市&#xff0c;编号从 0 到 n…

医院预约挂号平台的设计与实现

摘 要 网络的空前发展给人们的工作和生活带来了极大的便利&#xff0c;信息技术已成为节约运营成本、提高工作效率的首选。相比之下&#xff0c;国内相当多的中小医院在医院预约工作中的手工工作比较保守&#xff0c;数据查询和存储成本都很高&#xff0c;但效率很低。为了使医…

JAVAEE初阶 多线程基础(六)

wait,notify,饿汉模式 一.wait,notify方法使用1.1 例子 二.wait和sleep区别三.单例模式中的饿汉模式 一.wait,notify方法使用 引入wait和notify为了能够从应用层面上,干预到多个不同线程代码的执行顺序,不是影响系统的线程调度策略. 相当于是在应用程序代码中,让后执行的线程,主…

支付宝沙箱支付

1. 二维码 1.1 什么是二维码&#xff1a; ​ 二维码又称QR Code&#xff0c;QR全称Quick Response&#xff0c;是一个近几年来移动设备上超流行的一种编码方式&#xff0c;它比传统的Bar Code条形码能存更多的信息&#xff0c;也能表示更多的数据类型。 ​ 二维条码/二维码&…

leetcode LCR 083. 全排列

Problem: LCR 083. 全排列 思路 使用一个visited数组来记录每一轮递归中数字被使用情况&#xff0c;dfs Code /*** param {number[]} nums* return {number[][]}*/ var permute function(nums) {const len nums.lengthconst cur [] // 当前轮次的排列结果const res [] /…

【2023.12.4练习】数据库知识点复习测试

概论 数据表&#xff1a;用于存储现实中数据的联系。 储存信息联系。 字段&#xff1a;又称列&#xff0c;如姓名、年龄、编号等。 记录&#xff1a;又称元组&#xff0c;为数据表中的一行&#xff0c;代表了一个实体的信息。 数据库&#xff08;DB&#xff09;&#xff1…

HNU-电路与电子学-2017期末B卷(不含解析)

【写在前面】 电路与电子学好像是从2020级开设的课程&#xff0c;故实际上目前只有2020与2021两个年级考过期末考试。 这门课程主要由所谓的“数电”与“模电”组成。而且先学的“模电”后学的“”数电&#xff0c;故期中考试主要以“模电”为主&#xff0c;期末考试主要以“…

C语言变长参数及其陷阱

C语言变长参数及其陷阱 C 工具 变长参数列表 这部分解释了旧的 C 风格变长参数列表。了解这些内容很重要&#xff0c;因为你可能会在遗留代码中遇到它们。然而&#xff0c;在新代码中&#xff0c;你应该使用变参模板来实现类型安全的变长参数列表。 考虑 C 函数 printf()&a…

04数据平台Flume

Flume 功能 Flume主要作用&#xff0c;就是实时读取服务器本地磁盘数据&#xff0c;将数据写入到 HDFS。 Flume是 Cloudera提供的高可用&#xff0c;高可靠性&#xff0c;分布式的海量日志采集、聚合和传输的系统工具。 Flume 架构 Flume组成架构如下图所示&#xff1a; A…

watch的 防抖 防止多次调用请求

watch监听数据变化时&#xff0c;如果数据变化频繁&#xff0c;就会导致watch函数被多次调用&#xff0c;从而发生多次请求的情况。解决这个问题的方法是使用防抖或节流函数来限制函数的调用频率。下面是一个使用lodash库中的防抖函数解决watch多次请求问题的例子&#xff1a; …

常见数据文件存储和读取

当我们使用 Python 读取数据文件时&#xff0c;首先推荐的就是通过 Pandas 完成&#xff0c;Pandas 几乎支持所有常见的数据文件格式。 数据类型文件格式读取方式存储方式文本CSVread_csvto_csv文本JSONread_jsonto_json文本HTMLread_htmlto_html文本剪切板read_clipboardto_c…

ios上传图片旋转问题解决方案(vant上传图片)

使用 van-uploader(vant 组件库上传图片组件)上传图片时&#xff0c; 部分 ios 机型&#xff0c;会偶发从手机上传图片后&#xff0c;图片预览中&#xff0c;图片旋转了 90 度的问题。 对于该问题&#xff0c;vant 官网中也给出了解决方案。 但官网中的方案适配的是单选情况下…