美文网首页
java 均匀分割数组或集合

java 均匀分割数组或集合

作者: 田才 | 来源:发表于2021-09-15 12:54 被阅读0次

需求:假设文件夹内有多个小文件需要拆分给多个服务器处理,拆分尽量均匀顺序不能乱。

入参list 是需要分割的数组,groups 是需要分割多少份,limits 是函数返回第几份。
思路是,数组长度除groups ,余数中每一个元素均匀分配到组。因为groups一定大于等于余数,组的pageSize加1,一定可全部分担所有余数。
1、 list.length % group == 0 是刚好均分,那么 pageSize = list.length / group
2、(list.length % group)>= groupLimit,说明还有余数没有均分完成,所以 pageSize = (list.length / group) + 1
3、有余数且余数均分完成,skip 要等于之前均分余数的组长度加上无需均分余数的组长度

 public static String[] groupFilter(String[] list, String groups, String groupLimits) {
        if (list == null || list.length == 0) {
            return list;
        }
        if (!NumberUtils.isParsable(groups) || !NumberUtils.isParsable(groupLimits)) {
            return list;
        }
        int group = Integer.parseInt(groups);
        int groupLimit = Integer.parseInt(groupLimits);
        if (group <= 1 || groupLimit <= 0 || groupLimit > group) {
            return list;
        }
        int pageSize = list.length / group;
        int mod = list.length % group;
        int skip = 0;
        if(mod == 0){//刚好均分
            skip = pageSize * (groupLimit - 1);
        }else if (mod >= groupLimit) {//有余数均分余数
            pageSize = pageSize + 1;
            skip = pageSize * (groupLimit - 1);
        } else {//有余数且余数均分完成
            skip = ((pageSize + 1) * mod)  + (pageSize * (groupLimit - mod - 1));
        }
        return Arrays.stream(list).sorted().skip(skip).limit(pageSize).toArray(String[]::new);
    }

相关文章

  • java 均匀分割数组或集合

    需求:假设文件夹内有多个小文件需要拆分给多个服务器处理,拆分尽量均匀顺序不能乱。 入参list 是需要分割的数组,...

  • java集合分割

    转http://blog.csdn.net/benjaminlee1/article/details/72860845

  • JavaSE集合类

    JavaSE集合类 概述 Java中集合类概述Java中数组与集合的比较Java中集合框架层次结构 Collect...

  • Java的集合与数组的基本区别

    Java的集合与数组的基本区别 (一)数组 数组 用于存储基本数据类型,数组的长度固定。 (二)集合 集合类存放的...

  • java基础系列05--集合(1)

    JAVA集合 集合由来: 数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,java内部给...

  • Java中数组和集合之间的转换

    Java中怎么将数组转换为集合或者将集合转换为数组??? Talk less,Show me the code! ...

  • Comparable 和 Comparator比较

    对集合或数组进行排序有两种方法:1.集合中的对象所属的类实现了java.lang.Comparable 接口,然后...

  • Jackson –反序列化为数组或集合

    1.概述 本文主要展示如何使用Jackson 2将JSON数组反序列化为Java数组或集合。 要了解更多关于Jac...

  • Java集合干货系列-集合总体大纲

    前言 Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工...

  • Vector

    Java集合 Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Jav...

网友评论

      本文标题:java 均匀分割数组或集合

      本文链接:https://www.haomeiwen.com/subject/tlvkgltx.html