集合拆分批量数据处理

主要把一个大集合拆分为若干个小的集合,多线程处理数据,或者应对大量数据批量插入数据库,一次批量插入过多导致数据包过大问题,分批执行。

使用方式如下

public class Test {

    public static void main(String[] args) {
        {
            List<Integer> lists = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
            List<List<Integer>> subLists = CollUtils.subList(lists, 2);
            // 输出 [[1, 2], [3, 4], [5, 6], [7, 8], [9]]
            System.out.println(subLists);
        }
        {
            List<Integer> lists = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
            List<List<Integer>> subLists = CollUtils.subList(lists, 5);
            // 输出 [[1, 2, 3, 4, 5], [6, 7, 8, 9]]
            System.out.println(subLists);
        }
    }

}

代码如下

public class CollUtils {

    /**
     * 批量处理数据用
     * <p>
     * 注意,此工具切分后,只是原始数据的引用,原对象修改,则切分后的数据也被修改
     *
     * @param list 被切分的集合
     * @param aFew 多少切一份
     * @param <T>  t
     * @return list
     */
    public static <T> List<List<T>> subList(List<T> list, int aFew) {
        if (aFew <= 0) {
            throw new IndexOutOfBoundsException();
        }
        if (list == null || list.isEmpty()) {
            return Collections.emptyList();
        }
        List<List<T>> arrayList = new ArrayList<>();
        int size = list.size();
        for (int i = 0; i < size; i += aFew) {
            List<T> subList = list.subList(i, Math.min((i + aFew), size));
            arrayList.add(subList);
        }
        return arrayList;
    }

}
更新日期:
作者: qwding, 丁乾文