/**
* @version 1.0
* @author: fwjia
*/
import java.util.List; public class PageModel<T> {
/***
* 当前页
*/
private int page = 1; /***
* 总页数
*/
public int totalPages = 0; /***
* 每页数据条数
*/
private int pageRecorders; /***
* 总页数
*/
private int totalRows = 0; /***
* 每页的起始数
*/
private int pageStartRow = 0; /***
* 每页显示数据的终止数
*/
private int pageEndRow = 0; /***
* 是否有下一页
*/
private boolean hasNextPage = false; /***
* 是否有前一页
*/
private boolean hasPreviousPage = false; /***
* 数据集合
*/
private List<T> list; public PageModel(List<T> list, int pageRecorders) {
// 通过对象集,记录总数划分
init(list, pageRecorders);
} /** *//**
* 初始化list,并告之该list每页的记录数
* @param list 数据几个
* @param pageRecorders 一页显示多少数据
*/
public void init(List<T> list, int pageRecorders) {
this.pageRecorders = pageRecorders;
this.list = list;
totalRows = list.size();
hasPreviousPage = false;
if ((totalRows % pageRecorders) == 0) {
totalPages = totalRows / pageRecorders;
} else {
totalPages = totalRows / pageRecorders + 1;
} if (page >= totalPages) {
hasNextPage = false;
} else {
hasNextPage = true;
} if (totalRows < pageRecorders) {
this.pageStartRow = 0;
this.pageEndRow = totalRows;
} else {
this.pageStartRow = 0;
this.pageEndRow = pageRecorders;
}
} // 判断要不要分页
public boolean isNext() {
return list.size() > 5;
} public void setHasPreviousPage(boolean hasPreviousPage) {
this.hasPreviousPage = hasPreviousPage;
} public String toString(int temp) {
String str = Integer.toString(temp);
return str;
} public void description() { String description = "共有数据数:" + this.getTotalRows() + "共有页数: " + this.getTotalPages() + "当前页数为:" + this.getPage() + " 是否有前一页: " + this.isHasPreviousPage() + " 是否有下一页:" + this.isHasNextPage() + " 开始行数:" + this.getPageStartRow() + " 终止行数:" + this.getPageEndRow(); System.out.println(description);
} public List getNextPage() {
page = page + 1; disposePage(); System.out.println("用户凋用的是第" + page + "页");
this.description();
return getObjects(page);
} /**
* 处理分页
*/
private void disposePage() { if (page == 0) {
page = 1;
} if ((page - 1) > 0) {
hasPreviousPage = true;
} else {
hasPreviousPage = false;
} if (page >= totalPages) {
hasNextPage = false;
} else {
hasNextPage = true;
}
} public List getPreviousPage() { page = page - 1; if ((page - 1) > 0) {
hasPreviousPage = true;
} else {
hasPreviousPage = false;
}
if (page >= totalPages) {
hasNextPage = false;
} else {
hasNextPage = true;
}
this.description();
return getObjects(page);
} /**
* 获取第几页的内容
*
* @param page 当前页面
* @return
*/
public List<T> getObjects(int page) {
if(page == 0){
this.setPage(1);
}
else{
this.setPage(page);
}
this.disposePage();
if (page * pageRecorders < totalRows) {
// 判断是否为最后一页
pageEndRow = page * pageRecorders;
pageStartRow = pageEndRow - pageRecorders;
} else {
pageEndRow = totalRows;
pageStartRow = pageRecorders * (totalPages - 1);
} List<T> objects = null;
if (!list.isEmpty()) {
objects = list.subList(pageStartRow, pageEndRow);
}
//this.description();
return objects;
} public List<T> getFistPage() {
if (this.isNext()) {
return list.subList(0, pageRecorders);
} else {
return list;
}
} public boolean isHasNextPage() {
return hasNextPage;
} public void setHasNextPage(boolean hasNextPage) {
this.hasNextPage = hasNextPage;
} public List getList() {
return list;
} public void setList(List list) {
this.list = list;
} public int getPage() {
return page;
} public void setPage(int page) {
this.page = page;
} public int getPageEndRow() {
return pageEndRow;
} public void setPageEndRow(int pageEndRow) {
this.pageEndRow = pageEndRow;
} public int getPageRecorders() {
return pageRecorders;
} public void setPageRecorders(int pageRecorders) {
this.pageRecorders = pageRecorders;
} public int getPageStartRow() {
return pageStartRow;
} public void setPageStartRow(int pageStartRow) {
this.pageStartRow = pageStartRow;
} public int getTotalPages() {
return totalPages;
} public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
} public int getTotalRows() {
return totalRows;
} public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
} public boolean isHasPreviousPage() {
return hasPreviousPage;
} }

  测试类TestPagerModel

import java.util.ArrayList;
import java.util.List; /**
* @version 1.0
* @author: fwjia
*/
public class TestPagerModel { public static void main(String args[]) {
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
list.add("g");
list.add("h");
list.add("h");
list.add("i");
list.add("j");
list.add("k");
list.add("l");
list.add("m");
PageModel<String> pm = new PageModel(list, 5); List<String> sublist = pm.getObjects(2);
for(int i = 0; i < sublist.size(); i++) {
System.out.println(sublist.get(i));
}
} }

JAVA List集合转Page(分页对象)的更多相关文章

  1. java中集合Collection转list对象

    参考:java中集合Collection转list对象 首先我的需求是获取到购物车列表,购物车列表是一个Map对象,构造方法获取购物项,这里购物项是Collection对象 // 购物项集合,K商品I ...

  2. 将java类的泛型集合转换成json对象

    一般用extjs开发传输都是用json比较多,这个将来大家也许会用到... ConvertJsonUtils.java package com.sunweb.util.jsonfactory; imp ...

  3. Java 分页对象

    以前一直没有自己写过分页对象,自己模仿着写了一个分页对象,写完之后感觉也是挺简单的 package com.css.util; import java.io.Serializable;import j ...

  4. Java中的Set集合接口实现插入对象不重复的原理

    在java的集合中,判断两个对象是否相等的规则是: 1).判断两个对象的hashCode是否相等 .      如果不相等,认为两个对象也不相等,完毕       如果相等,转入2)(这一点只是为了提 ...

  5. 集合框架的类和接口均在java.util包中。 任何对象加入集合类后,自动转变为Object类型,所以在取出的时候,需要进行强制类型转换。

    集合框架的类和接口均在java.util包中. 任何对象加入集合类后,自动转变为Object类型,所以在取出的时候,需要进行强制类型转换.

  6. 第83节:Java中的学生管理系统分页功能

    第83节:Java中的学生管理系统分页功能 分页功能一般可以做成两种,一种是物理分页,另一种是逻辑分页.这两种功能是有各自的特点的,物理分页是查询的时候,对数据库进行访问,只是查一页数据就进行返回,其 ...

  7. Java:集合,Collection接口框架图

    Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合.Java 5之后,增加了Queue体系集合, ...

  8. ------------------java collection 集合学习 ----小白学习笔记,,有错,请指出谢谢

    <!doctype html>java对象集合学习记录 figure:first-child { margin-top: -20px; } #write ol, #write ul { p ...

  9. jstl标签forEach的用法--遍历java的集合

    再讲<c:forEach>之前,现讲一下让EL表达式生效的语句 <% @ page isELIgnored="false"%>这句语句在你想让EL表达式生效 ...

随机推荐

  1. 【机器学习】线性回归sklearn实现

    线性回归原理介绍 线性回归python实现 线性回归sklearn实现 这里使用sklearn框架实现线性回归.使用框架更方便,可以少写很多代码. 写了三个例子,分别是单变量的.双变量的和多变量的.单 ...

  2. 理解Python中的__builtin__和__builtins__

    以Python 2.7为例,__builtin__模块和__builtins__模块的作用在很多情况下是相同的. 但是,在Python 3+中,__builtin__模块被命名为builtins. 所 ...

  3. Python3 小工具-TCP发现

    from scapy.all import * import optparse import threading import os def scan(ip): pkt=IP(dst=ip)/TCP( ...

  4. 20162328蔡文琛week09

    学号 2016-2017-2 <程序设计与数据结构>第X周学习总结 教材学习内容总结 数据库是为了其他程序提供数据的应用软件. 关系书就哭通过唯一的标识符在不同表的记录见建立了关系. JD ...

  5. c#程序的config文件问题

    1.vshost.exe.config和app.config两个文件可不要,但exe.config文件不可少. 2.但是app.config最好也要修改了,每次重新生成程序的时候.exe.cmonfi ...

  6. 1001 Duplicate Pair

    1.题目戳这里 2.代码: #include<stdio.h> #include<string.h> int main() { int n; while(scanf(" ...

  7. Java中的 toString 方法

    1. Object 类中定义有 public String toString() 方法,其返回值是 String 类型,描述当前对象的有关信息: 2. 在进行 String 与其它类型数据的连接操作时 ...

  8. 内部网关协议RIP 路由选择算法(距离向量)

    RIP是一种基于距离向量的路由选择协议 RIP的距离就是指的跳数,没经过一个路由,就是一跳,RIP允许一跳路径最多经过15个路由器,所以16个的话就相当于不可以到达了 RIP协议的特点: 1:仅和相邻 ...

  9. MFC最基本动作(如创建窗口,点击取消等)函数的执行顺序

    一.MFC应用程序中处理消息的顺序: 1.AfxWndProc()       该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc2.AfxCallWndProc() ...

  10. 开发iOS百度地图大头针可以重复点击

    [self.mapView deselectAnnotation:view.annotation animated:YES];