java 对List进行物理分页
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package controller.groupbuying.navigate; /**
*
* @author fee
* @date 2011-03-31 12:39:07
* @copyright 广州互动生活网络科技有限公司
*/
import java.util.ArrayList;
import java.util.List; public class PageModel { private int page = 1; // 当前页
public int totalPages = 0; // 总页数
private int pageRecorders;// 每页5条数据
private int totalRows = 0; // 总数据数
private int pageStartRow = 0;// 每页的起始数
private int pageEndRow = 0; // 每页显示数据的终止数
private boolean hasNextPage = false; // 是否有下一页
private boolean hasPreviousPage = false; // 是否有前一页
private List list; // private Iterator it;
public PageModel(List list, int pageRecorders) {
init(list, pageRecorders);// 通过对象集,记录总数划分
} /** */
/**
* 初始化list,并告之该list每页的记录数
* @param list
* @param pageRecorders
*/
public void init(List list, int pageRecorders) {
this.pageRecorders = pageRecorders;
this.list = list;
totalRows = list.size();
// it = list.iterator();
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 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 objects = null;
if (!list.isEmpty()) {
objects = list.subList(pageStartRow, pageEndRow);
}
//this.description();
return objects;
} public List 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;
} 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 pm = new PageModel(list, 8);//每页显示条数 List sublist = pm.getObjects(2);//显示第几页
for (int i = 0; i < sublist.size(); i++) {
System.out.println(sublist.get(i));
}
}
}
java 对List进行物理分页的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- java 物理分页和逻辑分页
A.逻辑分页利用游标分页,好处是所有数据库都统一,坏处就是效率低.1.逻辑分页的第一种方式,利用ResultSet的滚动分页.这种分页方式依靠的是对结果集的算法来分页,因此通常被称为“逻辑分页”.步骤 ...
- mybatis的物理分页:mybatis-paginator
github上有一个专门针对mybatis的物理分页开源项目:mybatis-paginator,兼容目前绝大多数主流数据库,十分好用,下面是使用步骤: 环境:struts2 + spring + m ...
- MyBatis 物理分页
MyBatis使用RowBounds实现的分页是逻辑分页,也就是先把数据记录全部查询出来,然在再根据offset和limit截断记录返回 为了在数据库层面上实现物理分页,又不改变原来MyBatis的函 ...
- Spring jdbcTemplate + EasyUI 物理分页
前文说到,新项目中,用到的是SpringMVC + jdbcTemplate,前台是EasyUI,发现同事以前封装分页是逻辑分页,于是,自己动手封装了下物理分页. 这个是核心分页实体: import ...
- Mybatis 数据库物理分页插件 PageHelper
以前使用ibatis/mybatis,都是自己手写sql语句进行物理分页,虽然稍微有点麻烦,但是都习惯了.最近试用了下mybatis的分页插件 PageHelper,感觉还不错吧.记录下其使用方法. ...
- Java Web -【分页功能】详解
分页简介 分页功能在网页中是非常常见的一个功能,其作用也就是将数据分割成多个页面来进行显示. 使用场景: 当取到的数据量达到一定的时候,就需要使用分页来进行数据分割. 当我们不使用分页功能的时候,会面 ...
- Java相关面试题总结
本文分为十九个模块,分别是: Java 基础.容器.多线程.反射.对象拷贝.Java Web .异常.网络.设计模式.Spring/Spring MVC.Spring Boot/Spring Clou ...
- 从.Net到Java学习第三篇——spring boot+mybatis+mysql
从.Net到Java学习第一篇——开篇 环境:mysql5.7 新建mysql数据库demo,然后执行如下sql脚本进行数据表创建和数据初始化: -- ------------------------ ...
随机推荐
- Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046} failed due to the following error: 80070005 拒绝访问。
这几天在写一个导出word的功能,使用 Microsoft.Vbe.Interop.dll和Office.dll 在本地都可以正常运行,但是上传到服务器后就报错,如下图: 对于此问题,也在网上查了一些 ...
- XML文件(2)--使用DOM4J示例
其他依赖字段/方法 private List<Book> bookList = new LinkedList<Book>(); public List<Book> ...
- R语言——绘制半圆形图
好久没发点新的作品了.......也许...... Que sera, seraWhatever will be, will be
- Abp集成Swagger的最佳实践
1.在项目中添加nuget包 Abp.Web.Api.SwaggerTool 2.在项目Abp模块的DependsOn添加AbpWebApiSwaggerToolModule Run It,启动项目, ...
- redis 间断性耗时长问题解决
我发现开发项目用的redis 隔一两分钟就出现 耗时问题,长达五秒.一开始以为是 redis 服务器不稳定,但运维测试发现redis稳定的,在高并发下最大耗时也就只有100毫秒左右,怎么也不可能达到5 ...
- marquee上下左右循环无缝滚动代码
一.横向滚动<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN "><HTML>< ...
- 页面滚动到底部自动 Ajax 获取文章
页面滚动到底部自动 Ajax 获取文章 代码如下 复制代码 var _timer = {};function delay_till_last(id, fn, wait) { if (_time ...
- 微信小程序技术分析:Mustache语法要点总结
小程序开发的wxml里,用到了Mustache语法.所以,非常有必要把Mustache研究下. 什么是Mustache?Mustache是一个logic-less(轻逻辑)模板解析引擎,它是为了使用户 ...
- liniux mint android-ndk风波
我的安装过程sudo chmod a+x android-ndk-r10d-linux-x86_64.bin/dowonload $ ./android-ndk-r10d-linux-x86_64.b ...
- html5--canvas绘制简单的时钟
http://5227788.cn/static/time.html <!DOCTYPE html> <html lang="en"> <head&g ...