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.dlhighland.cn">張軍個人網站</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.dlhighland.cn">張軍個人網站</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.dlhighland.cn
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

