最近有个分页需求,根据合同找商品,同时相同合同的商品不能分页展示,还不能超过100。
在写逻辑之前,我先在主函数中试了一下,具体如下,一开始只写了分页返回的是一个数字的list,后面还需要对合同进行拆分来显示,所以返回的变成了一个map的list。
public static void main(String[] args) {
//2、大于100的处理
List<Integer> contractProdCountList = new ArrayList<>();
contractProdCountList.add(52);
contractProdCountList.add(26);
contractProdCountList.add(12);
contractProdCountList.add(8);
contractProdCountList.add(80);
contractProdCountList.add(78);
contractProdCountList.add(79);
contractProdCountList.add(81);
contractProdCountList.add(82);
contractProdCountList.add(83);
contractProdCountList.add(84);
contractProdCountList.add(15);
contractProdCountList.add(16);
contractProdCountList.add(26);
contractProdCountList.add(36);
contractProdCountList.add(46);
contractProdCountList.add(22);
contractProdCountList.add(6);
List<Map<String, Object>> contractProdArray= new ArrayList<Map<String, Object>>();
int batchBuyContractProdCount = 0;
int page = 0;
//定义分页的数组
List<Integer> pageContractCountList=new ArrayList<>();
for(int i=0;i<contractProdCountList.size();i++){
HashMap<String, Object> map = new LinkedHashMap<String, Object>();
Integer batchBuyContractProdCountDto = contractProdCountList.get(i);
pageContractCountList.add(batchBuyContractProdCountDto);
batchBuyContractProdCount += batchBuyContractProdCountDto;
if(batchBuyContractProdCount>100){
page++;
int pageSize = batchBuyContractProdCount-batchBuyContractProdCountDto;
pageContractCountList.remove( pageContractCountList.get(pageContractCountList.size()-1));
map.put("page",page);
map.put("pageSize",pageSize);
map.put("pageContractCountList",pageContractCountList);
contractProdArray.add(map);
batchBuyContractProdCount = 0;
pageContractCountList = new ArrayList<>();
i--;
continue;
}
//最后一个加完也不到100的情况下,直接返回
System.out.println("i:"+i);
if(i+1 == contractProdCountList.size()){
page++;
int pageSize = batchBuyContractProdCount;
map.put("page",page);
map.put("pageSize",pageSize);
map.put("pageContractCountList",pageContractCountList);
contractProdArray.add(map);
}
}
System.out.println("ContractProdArray.toArray():"+Arrays.toString(contractProdArray.toArray()));
//合同商品列表循环的数据开始行数
int pageContractProdCountAdd = 0;
int totalPageSize = contractProdArray.size();
List<Integer> pageContractCountList1=new ArrayList<>();
for (int i = 0; i < contractProdArray.size(); i++) {
Map<String, Object> map = contractProdArray.get(i);
int page1 = (int)map.get("page");
int pageSize = (int)map.get("pageSize");
pageContractCountList1 = JSON.parseObject(JSON.toJSONString(map.get("pageContractCountList")),List.class) ;
System.out.println("page1:"+page1);
System.out.println("pageSize:"+pageSize);
System.out.println("pageContractCountList:"+Arrays.toString(pageContractCountList1.toArray()));
}
}