Java分页需求

近期在实现项目接口时,经常需要分页功能。有时返回“String”,有时是“Object”格式的分页List。针对这种情况,本人用java实现对List分页。

第一版

package org.sun.java;

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

/**
 *
 * @author Administrator
 * @date 2016年7月16日
 */
public class SubListOperation {
    final static int COUNT = 18;

    public List<String> init(int size) {
        List<String> lists = new ArrayList<String>();
        for (int i = 0; i < size; i++) {
            lists.add("t" + (i + 1));
        }
        return lists;
    }

    /**
     *
     * @param pageNum
     * @param pageSize
     * @return  简单分页功能
     */
    public List<String> subList(int pageNum, int pageSize) {
        List<String> lists = init(COUNT);
        int fromIndex = (pageNum - 1) * pageSize;
        int toIndex = fromIndex + pageSize;
        return lists.subList(fromIndex, toIndex);
    }

    public static void main(String[] args) {
        System.out.println("-------- start --------");
        new SubListOperation().output();
        System.out.println("-------- finish --------");
    }

    public void output(){
        int pageNum=2;
        int pageSize=5;
        for(String s:subList(pageNum,pageSize)){
            System.out.println(s);
        }
    }

}

-------- start --------
t6
t7
t8
t9
t10
-------- finish --------

考虑到超出元素个数时异常的情况,做多一步判断。

第二版

    /**
     *
     * @param pageNum
     * @param pageSize
     * @return  简单分页功能
     */
    public List<String> subList(int pageNum, int pageSize) {
        List<String> lists = init(COUNT);
        int fromIndex = (pageNum - 1) * pageSize;
        int toIndex = fromIndex + pageSize;
        int size = lists.size();
        if(fromIndex>=size){
            return new ArrayList<String>();
        }
        return lists.subList(fromIndex, Math.min(size,toIndex));
    }

第三版
package org.sun.java;

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

/**
 *
 * @author Administrator
 * @date 2016年7月16日
 */
public class SubListOperation {
    final static int COUNT = 18;

    public List<String> init(int size) {
        List<String> lists = new ArrayList<String>();
        for (int i = 0; i < size; i++) {
            lists.add("t" + (i + 1));
        }
        return lists;
    }

    /**
     *
     * @param size
     * @return 初始化用户列表
     */
    public List<User> initUser(int size) {
        List<User> lists = new ArrayList<User>();
        for (int i = 0; i < size; i++) {
            lists.add(new User((i + 1), "user" + (i + 1)));
        }
        return lists;
    }

    /**
     *
     * @param pageNum
     * @param pageSize
     * @return 简单分页功能
     */
    public List<User> userSubList(int pageNum, int pageSize) {
        List<User> lists = initUser(COUNT);
        int fromIndex = (pageNum - 1) * pageSize;
        int toIndex = fromIndex + pageSize;
        int size = lists.size();
        if (fromIndex >= size) {
            return new ArrayList<User>();
        }
        return lists.subList(fromIndex, Math.min(size, toIndex));
    }

    public List<String> subList(int pageNum, int pageSize) {
        List<String> lists = init(COUNT);
        int fromIndex = (pageNum - 1) * pageSize;
        int toIndex = fromIndex + pageSize;
        int size = lists.size();
        if (fromIndex >= size) {
            return new ArrayList<String>();
        }
        return lists.subList(fromIndex, Math.min(size, toIndex));
    }
    static class User {
        int id;
        String name;

        public User(int id, String name) {
            super();
            this.id = id;
            this.name = name;
        }

        @Override
        public String toString() {
            return "User [id=" + id + ", name=" + name + "]";
        }

    }

    public static void main(String[] args) {
        System.out.println("-------- start --------");
        // new SubListOperation().outputString();
        new SubListOperation().outputObject();
        System.out.println("-------- finish --------");
    }

    public void outputString() {
        int pageNum = 2;
        int pageSize = 5;
        for (String s : subList(pageNum, pageSize)) {
            System.out.println(s);
        }
    }

    public void outputObject() {
        int pageNum = 2;
        int pageSize = 5;
        for (User s : userSubList(pageNum, pageSize)) {
            System.out.println(s);
        }
    }

}

-------- start --------
User [id=6, name=user6]
User [id=7, name=user7]
User [id=8, name=user8]
User [id=9, name=user9]
User [id=10, name=user10]
-------- finish --------

泛型方法,通用类型实现分页

package org.sun.java;

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

/**
 *
 * @author Administrator
 * @date 2016年7月16日
 */
public class SubListOperation {
    final static int COUNT = 18;

    public List<String> init(int size) {
        List<String> lists = new ArrayList<String>();
        for (int i = 0; i < size; i++) {
            lists.add("t" + (i + 1));
        }
        return lists;
    }

    /**
     *
     * @param size
     * @return 初始化用户列表
     */
    public List<User> initUser(int size) {
        List<User> lists = new ArrayList<User>();
        for (int i = 0; i < size; i++) {
            lists.add(new User((i + 1), "user" + (i + 1)));
        }
        return lists;
    }

    /**
     *
     * @param lists 将被分页展示的列表
     * @param pageNum 页码数
     * @param pageSize 每页条数大小
     * @return
     */
    public <T> List<T> generalPagenation(List<T> lists,int pageNum, int pageSize) {
        int fromIndex = (pageNum - 1) * pageSize;
        int toIndex = fromIndex + pageSize;
        int size = lists.size();
        if (fromIndex >= size) {
            return new ArrayList<T>();
        }
        return lists.subList(fromIndex, Math.min(size, toIndex));
    }

    static class User {
        int id;
        String name;

        public User(int id, String name) {
            super();
            this.id = id;
            this.name = name;
        }

        @Override
        public String toString() {
            return "User [id=" + id + ", name=" + name + "]";
        }

    }

    public static void main(String[] args) {
        System.out.println("-------- start --------");
        new SubListOperation().outputT();
        System.out.println("-------- finish --------");
    }

    public void outputT() {
        int pageNum = 3;
        int pageSize = 5;
        for (Object s : generalPagenation(init(18),pageNum, pageSize)) {
            System.out.println(s);
        }
        System.out.println("---------***---------");
        for (Object s : generalPagenation(initUser(12),pageNum, pageSize)) {
            System.out.println(s);
        }
    }

}

-------- start --------
t11
t12
t13
t14
t15
---------***---------
User [id=11, name=user11]
User [id=12, name=user12]
-------- finish --------

 
时间: 2024-12-16 12:31:12

Java分页需求的相关文章

数据量你造吗-JAVA分页

数据量你造吗-JAVA分页 原创地址:   http://www.cnblogs.com/Alandre/  (泥沙砖瓦浆木匠),需要转载的,保留下! Thanks 学习的心态第一,解行要相应.其实<弟子规>在"余力学文"当中,一开头就强调了这一个重点."不力行,但学文,长浮华,成何人",这个没有侥幸的,只要学了不去做,无形当中就会增长傲慢,自己不知道.-<弟子规> Written In The Font JAVA-Web 基础那块,我自己也

浅谈Java分页技术

话不多言.我们要实现java分页技术,我们首先就需要定义四个变量,他们是: int  pageSize;//每页显示多少条记录 int pageNow;//希望现实第几页 int pageCount;//一共有多少页 int rowCount;//一共有多少条记录 说明: 1.pageSize是指定的 2.pageNow是用户选择的 3.rowCount是从表中查询得到的 4.pageCount是计算得到的,该计算为: if(rowCount%pageSize==0) { pageCount=r

Java 分页工具

[背景] 最近学习Spring MVC,涉及到分页显示的问题,准备自己整理一个分页工具.由于以前使用Strus框架使用 NewPandaKing 的一个PageBean和Page方法,耦合性比较高,于是优化一下. [优点] 耦合低,使用方便. [缺点] 由于耦合低,不查数据库,所以每次使用List的sublist方法,效率降低. 代码如下: 分页工具类:PageUtil.java /** * Java 分页工具类 */ package com.util; import java.util.Has

java分页组件简单设计(贼简单)

代码很简单,关键是思想. 每个业务模块基本都会涉及到分页的应用,不管是普通的分页浏览还是瀑布流形式的浏览.分页可以减轻服务器的压力,可以节俭页面布局.在我们的分页简单组件设计中,主要是需要返回给客户端四个数据:列表对象.当前页码.每页记录最大条数.记录总数. 列表对象:顾名思义,就是展示给用户看的当前页面记录: 当前页码:主要是需要js来高亮: 每页记录最大条数:一般是服务器设定 记录总数:js用来计算总页数使用 设计思想: 1.由于分页是一种可以公共使用的功能,所以可以开发成一个组件,这样可以

java 分页封装类

//后台Page.javapackage com.complaints.util;5import java.util.List;import java.util.Map;public class Page { private String pageBar; private int pageCount;//页总数 private int rowCount;//总行数 private int pagesize = 10;//每页显示的数据记录 private int curPage;//当前页 pr

java 分页代码

java======================== /** * 分页实体类 * @version [版本号, Nov 9, 2011] */public class Page { private int currentPage;//当前页 private int pageSize; //分页大小 private int totalNum; //总条数 private int totalPage; //总页数 private String url; //url地址 //private Obj

MongoDB分页的Java实现和分页需求的思考

前言 传统关系数据库中都提供了基于row number的分页功能,切换MongoDB后,想要实现分页,则需要修改一下思路. 传统分页思路 假设一页大小为10条.则 //page 1 1-10 //page 2 11-20 //page 3 21-30 ... //page n 10*(n-1) +1 - 10*n MongoDB提供了skip()和limit()方法. skip: 跳过指定数量的数据. 可以用来跳过当前页之前的数据,即跳过pageSize*(n-1). limit: 指定从Mon

Java分页下载

需求.提供公共的可以按照一定条件查询出结果,并提供将查询结果全部下载功能(Excel.CSV.TXT),由于一次性查出结果放到内存会占用大量内存.需要支持分页模式查询出所有数据. 实现思路 1.在公共的controller(BaseController)中增加下载方法 2.支持自定义分页查询方式.自定义表头和查询结果属性对应 @ResponseBody @RequestMapping("/exportExcel.json") public void exportExcel(HttpSe

java分页大全

////////////////////////////////////////////////////在struts中分页的一种实现//////////////////////////////////////////////////// 在struts中分页的一种实现 我的项目中的分页功能1, 思路 使用一个页面控制类,它记录页面信息,如上页,下页,当前页等.在查询的Action中,将这个控制类和查询条件一起传递给数据库访问bean,然后将这两个参数保存在用户session中.在分页控制Act