package zj.page.util; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.TreeSet; import zj.check.util.CheckUtil; import zj.page.bean.Datagrid; import zj.sort.util.SortUtil; /** * 处理查询结果后分页排序类<br> * * @version 1.00 (2011.12.02) * @author 张军 {@link <a target=_blank href="http://www.zhangjunbk.com">张军个人网站</a> <a target=_blank href="http://user.qzone.qq.com/360901061/">张军QQ空间</a>} */ public class PageUtil { /** * list数据分页 * * @param pages 数据集合 * @param pageNo 当前页面(从1开始) * @param pageRows 每页显示行数 * @param sortName 排序名 * @param sortOrder 排序类型[asc,desc] * @return */ public static <T> Datagrid<T> getDatagrid(List<T> pages, int pageNo, int pageRows, String sortName, String sortOrder) { Datagrid<T> data = new Datagrid<T>(); // 设置总记录数 data.setRows(pages); if (pages != null && pages.size() > 0) { // 设置总行数 data.setTotal(pages.size()); // 临时总记录数 Set<T> rowsOld = null; // SortedSet if (CheckUtil.isNull(sortName) || CheckUtil.isNull(sortOrder)) { // 如果没有指定排序,则无序 rowsOld = new HashSet<T>(); } else { // 排序 SortUtil<T> cu = new SortUtil<T>(); cu.setSortName(sortName); cu.setSortOrder(sortOrder); rowsOld = new TreeSet<T>(cu); } // 添加临时总记录 rowsOld.addAll(pages); // 设置到临时总记录对象中 data.setRowsOld(rowsOld); // 清空对象中的总记录 data.getRows().clear(); // 如果当前页面小于等于0,则赋值1 if (pageNo <= 0) pageNo = 1; // 计算开始记录索引 int startNum = (pageNo - 1) * pageRows + 1; // 记录结束记录索引 int endNum = pageNo * pageRows + 1; // 循环临时记录对象的数据 Iterator<T> it = rowsOld.iterator(); int _i = 0; while (it.hasNext()) { // 获取临时记录中的对象(指向下一条记录,如果不调用,则不会指向下一条记录) T t = it.next(); // 过虑开始结束记录索引中的数据 if (_i >= startNum - 1 && _i < endNum - 1) { // 如果临时记录中的大小小于索引 if (rowsOld.size() < _i + 1) break; data.getRows().add(t); } _i++; } } return data; } /** * list数据分页 * * @param pages * @param pageNo * @param pageRows * @return */ public static <T> Datagrid<T> getDatagrid(List<T> pages, int pageNo, int pageRows) { return getDatagrid(pages, pageNo, pageRows, null, null); } /** * 计算页数 * * @param total * @param rowsPerPage * @return */ public static int pageCount(int total, int rowsPerPage) { int pageCount = 0; int modNum = 0; pageCount = total / rowsPerPage; modNum = total % rowsPerPage; if (modNum != 0) { pageCount++; } return pageCount; } }
package zj.page.bean; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Set; import lombok.Getter; import lombok.Setter; /** * 处理查询结果后排序类<br> * * @version 1.00 (2011.12.02) * @author 张军 {@link <a target=_blank href="http://www.zhangjunbk.com">张军个人网站</a> <a target=_blank href="http://user.qzone.qq.com/360901061/">张军QQ空间</a>} */ @Getter @Setter public class Datagrid<T> implements Serializable { private static final long serialVersionUID = 1l; public Datagrid(int total, List<T> rows) { this.total = total; this.rows = rows; } public Datagrid() { } /** 总数 **/ private int total = 0; /** 新数据集合 **/ private List<T> rows = new ArrayList<T>(); /** 旧数据集合 **/ private Set<T> rowsOld; }
本文为张军原创文章,转载无需和我联系,但请注明来自张军的军军小站,个人博客http://www.zhangjunbk.com