【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

posted @   逆火狂飙  阅读(1624)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2020-05-13 SQL分词器1.10版
2018-05-13 【Python】使用hashlib进行MD5和sha1摘要计算
2018-05-13 【Python】torrentParser1.04 增加获得磁力链URI功能
2018-05-13 【Python】将对象存成json文件及从json取出对象
2018-05-13 【Python】列表(数组)的引用和拷贝
2018-05-13 【高中数学/函数/幂函数、指数函数】已知:a=2^4/3,b=4^2/5,c=25^1/3,求:a,b,c三者的大小关系?(2023年全国III卷)
2014-05-13 Win7双屏显示设置
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东
点击右上角即可分享
微信分享提示