java记录,将一个List均分成n个list,主要通过偏移量来实现的

2021-06-25 10:35:21 浏览数 (1)

简介 在开发中,我们需要将一个List数组按照每组几个,平均分成若干份,如果size数量不够平均分,前面满足的会分满,剩下的分到最后一个组,例如:6个,平均每组2个。就是2,2,2。如果每组4个,就是4,2。

代码如下

代码语言:javascript复制
/**
     * 将一个List均分成n个list,主要通过偏移量来实现的
     *
     * @param source 源集合
     * @param limit 最大值
     * @return
     */
    public static <T> List<List<T>> averageAssign(List<T> source, int limit) {
        if (null == source || source.isEmpty()) {
            return Collections.emptyList();
        }
        List<List<T>> result = new ArrayList<>();
        int listCount = (source.size() - 1) / limit   1;
        int remaider = source.size() % listCount; // (先计算出余数)
        int number = source.size() / listCount; // 然后是商
        int offset = 0;// 偏移量
        for (int i = 0; i < listCount; i  ) {
            List<T> value;
            if (remaider > 0) {
                value = source.subList(i * number   offset, (i   1) * number   offset   1);
                remaider--;
                offset  ;
            } else {
                value = source.subList(i * number   offset, (i   1) * number   offset);
            }
            result.add(value);
        }
        return result;
    }

0 人点赞