【Java】如何对列表进行手动分页
日常工作中多见用SQL配合公共类进行分页,写SQL是其中重点。
但有时拿到的就是全体数据,而不是几张表,这时就需要自己写代码进行分页了。
自行分页分排序和截取两步,这和SQL的逻辑是一致的。
以下是具体代码,其中核心是getPartList泛型静态函数。
package com.hy.lab.nosqlpaged; import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args){ List<Emp> allEmps=new ArrayList<>(); for(int i=0;i<100;i++){ allEmps.add(new Emp("Emp"+i,20+i)); } allEmps.sort((Emp a,Emp b)->a.getAge()-b.getAge());// 截取前的排序 System.out.println("-------------------------第一页------------------------------"); int page=1; int limit=10; int total=allEmps.size(); List<Emp> p1Ls=getPartList(allEmps,page,10); for(Emp e:p1Ls){ System.out.println(e); } System.out.println("-------------------------第三页------------------------------"); page=3; limit=10; total=allEmps.size(); List<Emp> p3Ls=getPartList(allEmps,page,10); for(Emp e:p3Ls){ System.out.println(e); } System.out.println("-------------------------第十页------------------------------"); page=10; limit=10; total=allEmps.size(); List<Emp> p10Ls=getPartList(allEmps,page,10); for(Emp e:p10Ls){ System.out.println(e); } System.out.println("-------------------------第二十页------------------------------"); page=20; limit=10; total=allEmps.size(); List<Emp> p20Ls=getPartList(allEmps,page,10); for(Emp e:p20Ls){ System.out.println(e); } System.out.println("-------------------------第负一页------------------------------"); page=-1; limit=10; total=allEmps.size(); List<Emp> pz1Ls=getPartList(allEmps,page,10); for(Emp e:pz1Ls){ System.out.println(e); } } /** * 按分页方式截取inLs的一部分 * @param inLs 传入列表 * @param page 页码 * @param limit 页容量 * @param <T> 元素类型 * @return 指定页的元素列表 */ public static <T> List<T> getPartList(List<T> inLs,int page,int limit){ page = (page <= 0) ? 1 : page; limit= (limit <= 0) ? 10 : limit; int total = inLs.size(); return inLs.subList(Math.min((page - 1) * limit, total), Math.min(page * limit, total)); } }
输出:
-------------------------第一页------------------------------ Emp name=Emp0 age=20 Emp name=Emp1 age=21 Emp name=Emp2 age=22 Emp name=Emp3 age=23 Emp name=Emp4 age=24 Emp name=Emp5 age=25 Emp name=Emp6 age=26 Emp name=Emp7 age=27 Emp name=Emp8 age=28 Emp name=Emp9 age=29 -------------------------第三页------------------------------ Emp name=Emp20 age=40 Emp name=Emp21 age=41 Emp name=Emp22 age=42 Emp name=Emp23 age=43 Emp name=Emp24 age=44 Emp name=Emp25 age=45 Emp name=Emp26 age=46 Emp name=Emp27 age=47 Emp name=Emp28 age=48 Emp name=Emp29 age=49 -------------------------第十页------------------------------ Emp name=Emp90 age=110 Emp name=Emp91 age=111 Emp name=Emp92 age=112 Emp name=Emp93 age=113 Emp name=Emp94 age=114 Emp name=Emp95 age=115 Emp name=Emp96 age=116 Emp name=Emp97 age=117 Emp name=Emp98 age=118 Emp name=Emp99 age=119 -------------------------第二十页------------------------------ -------------------------第负一页------------------------------ Emp name=Emp0 age=20 Emp name=Emp1 age=21 Emp name=Emp2 age=22 Emp name=Emp3 age=23 Emp name=Emp4 age=24 Emp name=Emp5 age=25 Emp name=Emp6 age=26 Emp name=Emp7 age=27 Emp name=Emp8 age=28 Emp name=Emp9 age=29
EMP类:
package com.hy.lab.nosqlpaged; public class Emp{ private String name; private int age; public Emp(String name, int age){ this.name=name; this.age=age; } public String toString(){ return String.format("Emp name=%s age=%d",name,age); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
END
参考资料:https://www.cnblogs.com/miracle-luna/p/15037742.html