Java 将List按照指定大小分段

    有的时候,如果我们需要将现有的List按照指定的大小(size)分成段到新的newList中,newList中的每个元素都是一个原有的List,原有的List中包含size个元素,见如下代码:

 

 

 

public class ListUtils {

    
    
    /**
     * 分割List
     * @author bianrx
     * @date 2012.1.13
     * @param list 待分割的list
     * @param pageSize 每段list的大小
     * @return List<<List<T>> 
     */
     public static <T> List<List<T>> splitList(List<T> list, int pageSize) {
       
        int listSize = list.size();                                                           //list的大小
        int page = (listSize + (pageSize-1))/ pageSize;                      //页数
       
        List<List<T>> listArray = new ArrayList<List<T>>();              //创建list数组 ,用来保存分割后的list
        for(int i=0;i<page;i++) {                                                         //按照数组大小遍历
            List<T> subList = new ArrayList<T>();                               //数组每一位放入一个分割后的list
            for(int j=0;j<listSize;j++) {                                                 //遍历待分割的list
                int pageIndex = ( (j + 1) + (pageSize-1) ) / pageSize;   //当前记录的页码(第几页)
                if(pageIndex == (i + 1)) {                                               //当前记录的页码等于要放入的页码时
                    subList.add(list.get(j));                                               //放入list中的元素到分割后的list(subList)
                }
               
                if( (j + 1) == ((j + 1) * pageSize) ) {                               //当放满一页时退出当前循环
                    break;
                }
            }
            listArray.add(subList);                                                         //将分割后的list放入对应的数组的位中
        }
        return listArray;
    }
   
    public static void main(String[] s) {
       
        List<String> strlist = new ArrayList<String>();
        for(int i=0;i<120;i++) {
            strlist.add("aa" + (i+1));
        }
        List<List<String>> list = split2List(strlist, 17);
       
        int index = 1;
        for(List<String> strlist2: list) {
            System.out.println(index++);
            System.out.println("----------------------------------");
            for(String str: strlist2) {
                System.out.print(str + "\t");
            }
            System.out.println("END");
            System.out.println();
        }
    }
   
   
}

 

以下是最新实现方式,效率有很大提升,已经测试通过,欢迎拍砖。

public static <T> List<List<T>> splitList(List<T> list, int pageSize) {

List<List<T>> listArray = new ArrayList<List<T>>();

List<T> subList = null; 

for (int i = 0; i < list.size(); i++) {

if (i % pageSize == 0) {//每次到达页大小的边界就重新申请一个subList

subList = new ArrayList<T>();

listArray.add(subList);

}

subList.add(list.get(i));

}

return listArray;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值