List集合拆分为多个List

list 拆分

Survive by day and develop by night.

talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.

happy for hardess to solve denpendies.

目录

概述

list 拆分是一个常见的需求。

需求:

list 拆分是一个常见的需求。

设计思路

实现思路分析

1.list 拆分是

java 复制代码
        // 创建模拟list
        List<Integer> dataList = new ArrayList<>();
        for (int i = 1; i <= 22; i++) {
            dataList.add(i);
        }
 
        // 每批次数据记录数量
        int partialLimit = 10;
        //判断是否有必要分批
        if (partialLimit < dataList.size()) {
            //当前数据按限制条数可分为多少批次
            int part = dataList.size()/partialLimit;
            List<Integer> partList;
            for (int i = 0; i < part; i++) {
                // 截取批次长度的list
                partList = dataList.subList(0, partialLimit);
                // 分批业务逻辑处理- 打印替代
                System.out.println("分割出口的数据: "+partList);
                // 去除已经处理的部分 (Arrays.asList()方式生成的数据不能进行此修改操作,会报错)
                partList.clear();
                System.out.println("剩余数据: "+dataList);
 
            }
            // 获取最后一次截取后的剩余列表数据
            if (!dataList.isEmpty()) {
                // 业务逻辑数据处理, - 打印替代
                System.out.println(dataList);
            }
        } else {
            System.out.println("数据不需要分批,直接进行业务逻辑处理!");
        }

2.用stream的parallel实现list的分批处理

java 复制代码
        // 按每5个一组分割
        int partialLimit = 5;
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7,8,9,10);
 
        // 获取需要分割的次数,注意不能直接除以批次数量
        int limit = (list.size()+partialLimit -1)/partialLimit;
 
        // 使用流遍历操作
        List<List<Integer>> arrayList = new ArrayList<>();
 
        Stream.iterate(0, n -> n + 1).limit(limit).forEach(i -> {
            arrayList.add(list.stream().skip((long) i * partialLimit).limit(partialLimit).collect(Collectors.toList()));
        });
        System.out.println(arrayList);

3.使用stream的parallel实现list的分批处理

java 复制代码
        // 按每5个一组分割
        int partialLimit = 5;
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7,8,9,10);
        // 获取需要分割的次数,注意不能直接除以批次数量,会丢失数据;
        int limit = (list.size()+partialLimit -1)/partialLimit;
        // 获取分割后的集合
        List<List<Integer>> splitList = Stream.iterate(0, n -> n + 1).limit(limit).parallel()
                .map(a -> list.stream().skip((long) a * partialLimit).limit(partialLimit).parallel()
                        .collect(Collectors.toList())).collect(Collectors.toList());
        // 执行具体业务方法。打印代替
        System.out.println(splitList);

参考资料和推荐阅读

参考资料
官方文档
开源社区
博客文章
书籍推荐

1.https://www.cnblogs.com/ChenQ2/p/16636306.html

2.https://www.cnblogs.com/ChenQ2/p/16636306.html

欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!同时,期望各位大佬的批评指正~

相关推荐
这是程序猿10 分钟前
基于java的ssm框架旅游在线平台
java·开发语言·spring boot·spring·旅游·旅游在线平台
i***t91929 分钟前
基于SpringBoot和PostGIS的云南与缅甸的千里边境线实战
java·spring boot·spring
k***082930 分钟前
【监控】spring actuator源码速读
java·spring boot·spring
麦麦鸡腿堡41 分钟前
Java_网络编程_InetAddress类与Socket类
java·服务器·网络
vx_dmxq2111 小时前
【PHP考研互助系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·mysql·考研·微信小程序·小程序·php
5***g2981 小时前
新手如何快速搭建一个Springboot项目
java·spring boot·后端
daidaidaiyu2 小时前
Jetlinks 物联网平台 开源版学习源码分析
java·mqtt·rxjava·tcp
j***78882 小时前
clickhouse-介绍、安装、数据类型、sql
java
q***47183 小时前
Spring中的IOC详解
java·后端·spring
vx_vxbs663 小时前
【SSM电影网站】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·python·mysql·小程序·php·idea