【java】LIst切割----划分 List為幾個LIst的幾種工具類 1.按照目標份數划分 2.按照目標容量划分 【適用場景:mybatis分批次In查詢,放置In拼接sql過長】


如題,示例代碼如下:

/**
     * 1> 按照份數---划分list
     * @param source
     * @param num    想要划分成多少份
     * @return
     */
    public static <T> List<List<T>> splitListForNum(List<T> source,int num){
        List<List<T>> result=new ArrayList<List<T>>();
        int remaider=source.size()%num;  //(先計算出余數)
        int number=source.size()/num;  //然后是商
        int offset=0;//偏移量
        for(int i=0;i<num;i++){
            List<T> value=null;
            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;
    }

    /**
     * 2> 根據目標容量 划分List
     * @param source
     * @param capacity 划分完成的單個List容量
     * @param <T>
     * @return
     */
    public static <T> List<List<T>> splitListBycapacity(List<T> source,int capacity){
        List<List<T>> result=new ArrayList<List<T>>();
        if (source != null){
            int size = source.size();
            if (size > 0 ){
                for (int i = 0; i < size;) {
                    List<T> value = null;
                    int end = i+capacity;
                    if (end > size){
                        end = size;
                    }
                    value = source.subList(i,end);
                    i = end;

                    result.add(value);
                }

            }else {
                result = null;
            }
        }else {
            result = null;
        }


        return result;
    }



    public static void main(String[] args) {
        List<Integer> all = new ArrayList<>();
        int a= 1000;
        for (int i = 0; i < a; i++) {
            all.add(i+1);
        }

        List<List<Integer>> split = splitListBycapacity(all,333);
        System.out.println(split.size());
        for (List<Integer> strings : split) {
            System.out.println(strings.size());
        }

    }

 【待優化】==============================================


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM