分页接口与实现

功能:

分页接口

源码:

package com.dotions.utils;

/**
 * <p> 分页接口 </p>
 * @author Dotions 2017-05-02
 */
public interface Pageable {
    /**
     * 页号
     * */
    int getPageNumber();

    /**
     * 页大小
     * */
    int getPageSize();
    
    /**
     * 总页数
     * */
    int getTotalPages();

    /**
     * 总元素数
     * */
    int getTotalElements();
    
    /**
     * 是否有下一页
     * */
    boolean hasNext();
    
    /**
     * 下一页
     * */
    Pageable next();
}
功能:

分页对象

源码:

package com.dotions.utils;

import java.util.Collections;
import java.util.List;

/**
 * <p>
 * 分页
 * </p>
 * 
 * @author dotions 2017-05-02
 */
public class Page<T> implements Pageable {

    private int pageNo = 1;
    private int pageSize = 50;
    private int totalElements = 0;
    private List<T> elements = Collections.emptyList();

    public Page() {
        super();
    }

    public Page(int totalElements) {
        super();
        this.totalElements = totalElements;
    }

    @Override
    public int getPageNumber() {
        return pageNo;
    }

    @Override
    public int getPageSize() {
        return pageSize;
    }

    @Override
    public int getTotalPages() {
        return totalElements / pageSize + 1;
    }

    @Override
    public int getTotalElements() {
        return totalElements;
    }

    public int getStart() {
        return (getPageNumber() - 1) * getPageSize();
    }

    public int getEnd() {
        return getPageNumber() * getPageSize();
    }

    public void setPageNo(int pageNo) {
        if (pageNo > 0 && pageNo <= getTotalPages()) {
            this.pageNo = pageNo;
        }
        // 设置的页号大于总页数,则将页号设置为最后一页
        if (pageNo > 0 && pageNo > getTotalPages()) {
            this.pageNo = getTotalPages();
        }
    }

    public void setPageSize(int pageSize) {
        if (pageSize > 0) {
            this.pageSize = pageSize;
        }
    }

    public void setTotalElements(int totalElements) {
        if (totalElements >= 0) {
            this.totalElements = totalElements;
        }
    }

    public void setElements(List<T> elements) {
        this.elements = elements;
    }

    public List<T> getElements() {
        return elements;
    }

    @Override
    public boolean hasNext() {
        return getTotalElements() - getPageNumber() * getPageSize() > 0;
    }

    @Override
    public Page<T> next() {
        this.setPageNo(pageNo + 1);
        this.elements = Collections.emptyList();
        return this;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("Page [pageNo=");
        builder.append(pageNo);
        builder.append(", pageSize=");
        builder.append(pageSize);
        builder.append(", totalElements=");
        builder.append(totalElements);
        builder.append(", elements=");
        builder.append(elements);
        builder.append(", hasNext()=");
        builder.append(hasNext());
        builder.append("]");
        return builder.toString();
    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,532评论 25 708
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,778评论 18 399
  • ABP入门系列目录——学习Abp框架之实操演练源码路径:Github-LearningMpaAbp 完成了任务清单...
    圣杰阅读 16,951评论 6 9
  • 一、什么是用户故事 用户故事描述了对用户、系统或软件购买者有价值的功能。一个好的用户故事包括三个要素: 1.角色:...
    ccixom阅读 34,461评论 0 16
  • “七月流火,八月未央,九月授衣。” 秋蝉把最后的一丝鸣叫缠绕在杨树枝头,透过阳光从斑驳的树影中倾泻而下,太阳也失去...
    _大文阅读 348评论 0 4