List转换PageInfo对象,手动分页,静态泛型方法的使用

业务上遇到手动实现分页的需要
于是用最近学到的静态泛型方法实现了一个分页工具类,使用泛型类的初衷就是想让这个类更加具有通用性,不想将传入的List对象写死

首先我们来复习一下
什么是静态泛型方法
静态泛型方法实际就是 静态(static修饰)的泛型方法
什么是泛型方法?
泛型方法的声明语法类似于泛型类型的语法。类型参数部分由尖括号分隔并出现在方法的返回类型之前。如果有多个类型参数,则以逗号分隔。
不同于以往的方法,泛型方法的传入对象类型或者传出对象类型是不确定的,在调用该类时依据传入的类型从而确定

  • 泛型方法语法结构
public static <T> void getName(T t){
}
public static <T> List<T> setName(T t){
}
public static <T> PageInfo<T> setName(T t){
}
...

在这里插入图片描述
接下来看我的实现

import com.github.pagehelper.PageInfo;
import java.util.ArrayList;
import java.util.List;

/**
* @description:
* @author NightFall
* @date 2023/02/20 17:01
*/
//工具类不能被初始化,所以要final修饰,符合规范
public final class PageInfoUtil {

	//工具类不能被初始化,构造方法也要私有化
    private PageInfoUtil() {
    }

    /**
    * @description: 获取自定义分页对象
    * @param list 想要转换为PageInfo对象的list
    * @param pageNo 页码
    * @param pageSize 页容量
    * @return
    * @throws
    */
    public static <T> PageInfo<T> getPageInfo(List<T> list, Integer pageNo, Integer pageSize) {
        PageInfo<T> pageInfo = new PageInfo<>();
        pageInfo.setTotal(list.size());
        pageInfo.setPageSize(pageSize);
        pageInfo.setPageNum(pageNo);
        pageInfo.setList((pageNo - 1) * pageSize >= list.size() ? 
                new ArrayList<>() : list.subList((pageNo - 1) * pageSize, Math.min(pageNo * pageSize, list.size())));
        return pageInfo;
    }
}

该类的功能很简单,传入的参数如下

参数含义
List<T> list想要进行分页的list对象
Integer pageNo想获取的页码
Integer pageSize页容量
(pageNo - 1) * pageSize >= list.size()

这是在判断,当前页数是否已经超过list总记录,如果超过就返回空List否则就正常截取相应条数的记录

list.subList((pageNo - 1) * pageSize, Math.min(pageNo * pageSize, list.size()))

这是在截取相应的记录,使用pageNo * pageSize和list.size()中最小的值做为终点索引,防止subList函数报错

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值