java中利用List的subList方法实现对List分页(简单易学)

以下是介绍利用List的subList方法实现对List分页,废话不多说了,直接看代码把

/** *//**
* List分页
* 实现:利用List的获取子List方法,实现对List的分页
* @author 显武
* @date 2010-1-8 16:27:31
*
*/  

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;
  }  

}  

//测试类:
package com.Gavin.tools.util;  

import java.util.ArrayList;
import java.util.List;  

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 pm = new PageModel(list, 5);  

    List sublist = pm.getObjects(3);
    for(int i = 0; i < sublist.size(); i++) {
      System.out.println(sublist.get(i));
    }
    System.out.println(sublist.get(0));
  }  

} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java(基于Struts2) 分页实现代码

    分页实现的基本过程是这样的: 1. 设置自己的分页器的基本参数(可以从配置文件中读取) ■每页显示的记录条数 ■每次最多显示多少页 2. 编写设置分页器其他参数的函数 主要参数有以下几个: 总记录条数 总页数 当前页号:现在显示的页数 每页显示的记录条数 当前页开始行(第一行是0行) 第一页页号 最后页页号 下一页页号 上一页页号 画面上显示的起始页号 画面上显示的结束页号 参数基本实现原理:设置以上各个参数,实际上只需要三个参数就可以对所有的其他变量进行设置,即总记录条数,每页显示记录数,每次

  • 举例详解用Java实现web分页功能的方法

    分页问题是一个非常普遍的问题,开发者几乎都会遇到,这里不讨论具体如何分页,说明一下Web方式下分页的原理.首先是查询获得一个结果集(表现为查询数据库获得的结果),如果结果比较多我们一般都不会一下显示所有的数据,那么就会用分页的方式来显示某些数据(比如20条).因为Http的无状态性,每一次提交都是当作一个新的请求来处理,即使是换页,上一次的结果对下一次是没有影响的. 这里总结三种实现分页的方式,不知道还有没有别的! 1.每次取查询结果的所有数据,然后根据页码显示指定的纪录. 2.根据页面只取一页

  • Java web velocity分页宏示例

    复制代码 代码如下: #macro(pager $url $pager)<ul class="pagination"> #set($FRONT_LEN = 4) #set($BEHIND_LEN = 5) #set($PAGER_LEN = 10) #set($PAGER_CENTER = $!{pager.pageNum} - $!{BEHIND_LEN}) <li #if($!{pager.currentPage} == 1) class="disabl

  • JavaWeb 简单分页实现代码

    JavaWeb 简单分页的实现: 这次主要是讲解一下通过登录后对得到的数据进行分页,首先我们新建一个登录页面login.jsp,因为我们主要学习一下分页,所以登录验证的部分不再阐述,主要代码如下: <form action="pageServlet"> 用户名:<input type="text" name="username"><br> 密 码:<input type="text"

  • java-SSH2实现数据库和界面的分页

    分页应该是在我们开发web应用时经常要做的工作,能够比较简洁的实现数据库和视图层的分页十分重要. 在数据库层利用hibernate进行数据库的分页,将从数据库中查询出的数据封装为javabean:在视图层就可以方便的实现分页. 创建PageBean package com.fishing.common.bean; import java.util.List; @SuppressWarnings("unchecked") public class PageBean { private L

  • java分页之假分页实现简单的分页器

    import java.util.Arrays; import java.util.Collections; import java.util.List; /** * @author shuang.gao Date: 2016/1/28 Time: 12:26 */ public class Pager<T> { /** * 每页显示条数 */ private int pageSize; /** * 原集合 */ private List<T> data; private Page

  • JavaWeb中的简单分页完整代码(推荐)

    这次主要是讲解一下通过登录后对得到的数据进行分页,首先我们新建一个登录页面login.jsp,因为我们主要学习一下分页,所以登录验证的部分不再阐述,主要代码如下: <form action="pageServlet"> 用户名:<input type="text" name="username"><br> 密 码:<input type="text" name="passwo

  • Java Web 简单的分页显示实例代码

    本文通过两个方法:(1)计算总的页数. (2)查询指定页数据,实现简单的分页效果. 思路:首先得在 DAO 对象中提供分页查询的方法,在控制层调用该方法查到指定页的数据,在表示层通过 EL 表达式和 JSTL 将该页数据显示出来. 先给大家展示下效果图: 题外话:该分页显示是用 "表示层-控制层-DAO层-数据库"的设计思想实现的,有什么需要改进的地方大家提出来,共同学习进步.废话不多说了,开始进入主题,详细步骤如下所示: 1.DAO层-数据库 JDBCUtils 类用于打开和关闭数据

  • 新闻列表的分页查询java代码实现

    本文实例为大家分享了新闻列表分页查询的java代码,供大家参考,具体内容如下 package com.ibeifeng.test; //创建新闻测试类 public class newTest { private long id; private String title; private String content; private String author; public newTest() { super(); } public newTest(long id, String titl

  • Java的MyBatis框架中实现多表连接查询和查询结果分页

    实现多表联合查询 还是在david.mybatis.model包下面新建一个Website类,用来持久化数据之用,重写下相应toString()方法,方便测试程序之用. package david.mybatis.model; import java.text.SimpleDateFormat; import java.util.Date; public class Website { private int id; private String name; private int visito

随机推荐