分页练习
今天做了一个分页练习题,如果有更好的办法欢迎讨论~~
public String limit(List<String> areaA, List<String> areaB) {
ArrayList<Page> pages = new ArrayList<>();
int sizeA = areaA.size();
int sizeB = areaB.size();
//计算A,B总共有多少页
int pageNumA=((sizeA-1)/6)+1;
int pageNumB=((sizeB-1)/4)+1;
int totalB=pageNumB;
int totalA=pageNumA;
//总页数
int pageCount=(pageNumA>pageNumB)?pageNumA:pageNumB;
int pageARemain=sizeA%6;//计算落到最后一页占的格子数
int pageBRemain=sizeB%4;
//通过map 循环出list
HashMap<Integer, List<String>> hashMapA = new HashMap<>();
HashMap<Integer, List<String>> hashMapB = new HashMap<>();
//区域A
for (int i=pageNumA; i >0 ; i--) {
int index=(i-1)*6;//计算起始下标
if (totalA==0){
hashMapB.put(i,areaA);
}else if (totalA>=0){
if (pageARemain!=0){
int end=index+pageBRemain;
hashMapA.put(i,areaA.subList(index,end));
}
if (i==1){
hashMapA.put(i,areaA.subList(index,6));
}
if (i!=totalA){
hashMapA.put(i,areaA.subList(index,index+6));
}
}
}
//区域B
for (int i=pageNumB; i >0 ; i--) {
int index=(i-1)*4;//计算起始下标
if (totalB==0){
hashMapB.put(i,areaB);
}else if (totalB>=0){
if (pageBRemain!=0){
int end=index+pageBRemain;
hashMapB.put(i,areaB.subList(index,end));
}
if (i==1){
hashMapB.put(i,areaB.subList(index,4));
}
if (i!=totalB){
hashMapB.put(i,areaB.subList(index,index+4));
}
}
}
for (int i = pageCount; i >0 ; i--) {
System.out.println("第"+i+"页");
for (int j = pageNumA; j > 0; j--) {
System.out.println("A区域:"+hashMapA.get(i));
break;
}
for (int j = pageNumB; j > 0; j--) {
System.out.println("B区域:"+hashMapB.get(i));
break;
}
}
return "success";
}
测试数据
public void limit() {
List<String> stringA = new ArrayList<>();
List<String> stringB = new ArrayList<>();
stringA.add("一");
stringA.add("二");
stringA.add("三");
stringA.add("四");
stringA.add("五");
stringA.add("六");
stringA.add("七");
stringB.add("a");
stringB.add("b");
stringB.add("c");
stringB.add("d");
stringB.add("e");
stringB.add("f");
stringB.add("g");
stringB.add("h");
stringB.add("i");
stringB.add("j");
stringB.add("k");
stringB.add("l");
stringB.add("m");
String limit = carouselService.limit(stringA,stringB);
System.out.println(limit);
}