List集合实现分页,按页数切割、按条数切割

在一些比较复杂一点的业务逻辑上面,我们经常要用实现手动对List集合进行分页而处理,还有批量插入等他操作,下面就用泛型实现了这些功能,减少工作的重复性。


	/**
	 * 泛型实现将List按照每页多少条拆分,再次组装集合包含集合
	 * @param list
	 * @param pageSize
	 * @return
	 */
	public static <T> List<List<T>>   splitList(List<T> list, int pageSize){
		List<List<T>> ListAll = new ArrayList<List<T>>();
		int start=0;
		int end=0;
		int len=list.size();
		int  size=(int) Math.ceil(len/(float)pageSize);
		for(int i=0;i<size;i++){
			start=i*pageSize;
			if(i==(size-1)){
				  end=len;
				}else{
				 end=(i+1)*pageSize;	
				}
			List<T> subList=(List<T>) list.subList(start, end);
			ListAll.add(subList);
		}
		return ListAll;	
	}
	
	
	/**
	 * 将List集合按页数组装成集合中包含集合
	 * @param list
	 * @param pageNum
	 * @return
	 */
	public static  <T> List<List<T>>  ListByPageNum(List<T> list, int pageNum){
		List<List<T>> ListAll = new ArrayList<List<T>>();
		int start=0;
		int end=0;
		int len=list.size();
		int  pageSize=(int) Math.ceil(len/(float)pageNum);
		System.out.println("每页对的条数为"+pageSize);
		for(int i=0;i<pageNum;i++){
			start=i*pageSize;
			if(i==(pageNum-1)){
			  end=len;
			}else{
			 end=(i+1)*pageSize;	
			}
			List<T> subList=(List<T>) list.subList(start, end);
			ListAll.add(subList);
		}
		return ListAll;	
	}
	
	/**
	 * 用subList()实现分页
	 * @param list
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
	public static  <T> List<T>  ListPagingUtils(List<T> list, int pageNum,int pageSize){
		int start=0,end=0;
		int len=list.size();
		int  pages=(int) Math.ceil(len/(float)pageSize);
		System.out.println("总页数"+pages);
		if(pageNum<1){pageNum=1;}
		if(pageNum>=1&&pageNum<pages){
			start=(pageNum-1)*pageSize;
			end=pageNum*pageSize;
			}
		if(pageNum>=pages){
			start=(pages-1)*pageSize;
			end=pageNum*pageSize;
			if(end>=len){
			 end=len;	
			}
		}
		System.out.println("截取的开始数量 "+start+"截取的结束数量 "+end);
		List<T> subList=(List<T>) list.subList(start, end);
		return subList;
	}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值