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

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

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

首先,引入maven依赖

java 复制代码
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>21.0</version>
</dependency>

部分源码

java 复制代码
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

java 复制代码
 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方法自定义集合拆分

java 复制代码
   /**
     * 分割集合
     *
     * @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

java 复制代码
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)));
    }

输出结果

相关推荐
写后端的胖头鱼4 小时前
一文详解Spring 事务失效场景
java·spring·事务·transactional·事务传播机制
Q26433650234 小时前
【有源码】基于Spring Boot和Vue的在线考试与交流系统-教育信息化背景下在线考试与交流一体化平台
java·vue.js·spring boot·mysql·spring·毕业设计·课程设计
Mikko74 小时前
JVM 线上排查实战(七):jps 看不到进程、jstack 报不允许的操作怎么办?attach 失败的六种情况实测
java·运维·jvm·后端
jianjinwssy4 小时前
MyBatis-Plus 从入门到实战:常用功能与核心原理
java·mybatis
会编程的吕洞宾4 小时前
Spring AI 2.0 会话记忆实战,让 AI 助手记住每一次对话
java·人工智能·spring
小宋10214 小时前
Agent 工具升级如何不破坏线上:Tool Schema 版本兼容与契约测试
java·人工智能·后端·spring
汤米粥4 小时前
后端开发主流技术方案
java·python·golang·php·nodejs·后端开发
Helix2504 小时前
2026编程入门指南:零基础如何科学选择第一门编程语言?
java·c语言·javascript·零基础·编程语言·python入门·编程就业
EatFan4 小时前
2026 后端 AI 集成三条落地路径:Spring AI 2.0、MCP 协议与旁路服务怎么选
java·人工智能·spring boot·spring·大模型·spring ai·mcp
SimonKing4 小时前
QClaw关停之后:一个工具的退场,一段关系的告别
java·后端·程序员