Java对List列表进行分组处理(对List列表固定分组/对List列表平均分组)

2023-03-06 16:25:03 浏览数 (1)

将一组数据平均分成n组

即:数据分组数固定为N,每组数据个数不定,每组个数由List列表数据总长度决定

代码语言:javascript复制
/**
 * 将一组数据平均分成n组
 *
 * @param source 要分组的数据源
 * @param n      平均分成n组
 * @param <T>
 * @return
 */
public static <T> List<List<T>> averageAssign(List<T> source, int n) {
    List<List<T>> result = new ArrayList<List<T>>();
    //(先计算出余数)
    int remainder = source.size() % n;
    //然后是商
    int number = source.size() / n;
    //偏移量
    int offset = 0;
    for (int i = 0; i < n; i  ) {
        List<T> value = null;
        if (remainder > 0) {
            value = source.subList(i * number   offset, (i   1) * number   offset   1);
            remainder--;
            offset  ;
        } else {
            value = source.subList(i * number   offset, (i   1) * number   offset);
        }
        result.add(value);
    }
    return result;
}

将一组数据固定分组,每组n个元素

即:数据分组数不定,每组数据固定为N个,分组数由List列表数据总长度决定

方法一:

代码语言:javascript复制
/**
 * 将一组数据固定分组,每组n个元素
 * @param source 要分组的数据源
 * @param n      每组n个元素
 * @param <T>
 * @return
 */
public static <T> List<List<T>> fixedGrouping(List<T> source, int n) {

    if (null == source || source.size() == 0 || n <= 0)
        return null;
    List<List<T>> result = new ArrayList<List<T>>();

    int sourceSize = source.size();
    int size = (source.size() / n)   1;
    for (int i = 0; i < size; i  ) {
        List<T> subset = new ArrayList<T>();
        for (int j = i * n; j < (i   1) * n; j  ) {
            if (j < sourceSize) {
                subset.add(source.get(j));
            }
        }
        result.add(subset);
    }
    return result;
}

方法二

代码语言:javascript复制
/**
 * 将一组数据固定分组,每组n个元素
 *
 * @param source 要分组的数据源
 * @param n      每组n个元素
 * @param <T>
 * @return
 */
public static <T> List<List<T>> fixedGrouping2(List<T> source, int n) {

    if (null == source || source.size() == 0 || n <= 0)
        return null;
    List<List<T>> result = new ArrayList<List<T>>();
    int remainder = source.size() % n;
    int size = (source.size() / n);
    for (int i = 0; i < size; i  ) {
        List<T> subset = null;
        subset = source.subList(i * n, (i   1) * n);
        result.add(subset);
    }
    if (remainder > 0) {
        List<T> subset = null;
        subset = source.subList(size * n, size * n   remainder);
        result.add(subset);
    }
    return result;
}

0 人点赞