List集合進行分頁

/**
* @ClassName: Text2
* @Description: (集合的分頁算法)
* @author Luhan
* @date 2017年3月16日 下午17:18:06
*/
public class Text1 {
private static List<Integer> date;
private static Integer PaseSize = 6;//顯示多少條
private static Integer mPageNum = 30;//總條數算法

public static void main(String[] args) {
//傳入的是顯示第幾頁
showList(2);
}
/**
* 顯示數據,分頁顯示list裏面的數據
* @param pageNum 頁數
*/
public static void showList(int pageNum){
date = new ArrayList<Integer>();
for (int i = 0; i < mPageNum; i++) {
date.add(i+1);
}
/**這裏是決定一頁只會顯示6條
*
* for循環的左邊 i等於的值
* 當是第一頁的時候 1 對 0;索引應該從0開始
* 當是第二頁的時候 2 對 6;索引應該從6開始
* 當是第三頁的時候 3 對 12;索引應該從12開始
* 當是第四頁的時候 4 對 18;索引應該從18開始
* .
* .
* .
* 以此類推
* 當是第n頁的時候索引就應該是從(當前頁數-1)*顯示條數
*
*
*
* for循環的右邊 i小於的值,這裏假設只有20條數據
* 當是第一頁的時候 1 對 0~6;右邊的數應該爲6
* 當是第一頁的時候 2 對 6~12;右邊的數應該爲6
* 當是第一頁的時候 3 對 12~18;右邊的數應該爲6
* 當是第一頁的時候 4 對 18~20;右邊的數應該爲20,這裏爲何會是20而不是24是由於咱們只有20條數據,
* 顯然i不能小於24,這樣後面2一、2二、23根本就沒有值,因此這應該是20
* 設 x = (當前頁數-1)*顯示條數;
* 最後得出右邊的數值應該爲:判斷x是否是大於數據的總條數,若是大於就顯示總條數,若是小於就顯示x
* 因此這裏咱們能夠使用三元運算符來解決就是下方的表達式
* ((pageNum-1)*PaseSize)+PaseSize > mPageNum ? mPageNum:((pageNum-1)*PaseSize)+PaseSize)
* 先判斷下(當前是第幾頁-1乘以顯示條數)是否是大於總條數,若是大於總條數就返回總條數,若是小於總條數則返回(當前是第幾頁-1乘以顯示條數)
*/
List<Integer> newDate = new ArrayList<Integer>();
for (int i = (pageNum-1)*PaseSize; i < (
((pageNum-1)*PaseSize)+PaseSize > mPageNum ? mPageNum:((pageNum-1)*PaseSize)+PaseSize); i++) {
newDate.add(date.get(i));
}
System.out.println(">>>>>>>>>>第"+pageNum+"頁的數據>>>>>>>>>>>>");
for (int i = 0; i < newDate.size(); i++) {
System.out.println(newDate.get(i));
}
}
}測試

若是想直接拿來使用的話,就直接複製下面的代碼便可spa

/**
* 數據集合的分頁方法,根據傳入總共的數據跟頁碼,返回頁碼所須要顯示多少條的數據
* <BR/>採用泛型的方法,即爲,list中爲何類型的數據就返回什麼類型的數據
* @param f 帶有須要進行分頁的數據集合
* @param pageNo 第幾頁
* @param dataSize 顯示多少條數據
* @return 進過度頁以後返回的數據
*/
public static <F> List<F> datepaging(List<F> f,int pageNo,int dataSize){
/*
* 通過測試發現當pageNo爲0或者小於時,也就是第0頁時,程序會報錯,因此須要處理一下pageNo的值
*
* 先進行空值的判斷,避免程序出現null異常
*
* 當pageNo的值小於等於0時,咱們讓它的值爲1
*/
//參數的校驗
if(f == null){//當傳入過來的list集合爲null時,先進行實例化
f = new ArrayList<F>();
}
if((Object)pageNo == null){//當傳入過來的pageNo爲null時,先進行賦值操做
pageNo = 1;
}
if((Object)dataSize == null){//當傳入過來的dataSize爲null時,先進行賦值操做
dataSize = 1;
}
if(pageNo <= 0){
pageNo = 1;
}

//記錄一下數據一共有多少條
int totalitems = f.size();
//實例化一個接受分頁處理以後的數據
List<F> afterList = new ArrayList<F>();
/*
* 進行分頁處理,採用for循環的方式來進行處理
*
* 首先for循環中,i應該從哪裏開始:i應該從 (當前是第幾頁 -1 乘以 條數) 開始
*
* 而後for循環應該到哪裏結束,也就是i應該小於:判斷(開始的索引+顯示條數)是否是大於總條數,若是大於就是總條數,若是小於就是(開始的索引+顯示條數)
*
* 而後讓i++
*/

for
( int i = (pageNo-1)*dataSize;
i < (((pageNo -1)*dataSize) + dataSize >
totalitems ? totalitems:((pageNo -1)*dataSize) +dataSize);
i++) {
//而後將數據存入afterList中

afterList.add(f.get(i));
}

//而後將處理後的數據集合進行返回
return afterList;
}索引

相關文章
相關標籤/搜索