有時候經常需要對List進行分批處理,就搞個工具類,使用類似迭代器模式
package com.xiao.springcloud.demo.common.util;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* [簡要描述]: List 分頁工具
* [詳細描述]:
*
* @author xiaolinlin
* @version 1.0, 2020/1/15 09:38
* @since JDK 1.8
*/
public final class ListPageUtil<T>
{
private CopyOnWriteArrayList<T> list;
private int pageSize = 0;
private int pageCount = 0;
private int listSize = 0;
private int index = 0;
/**
* [簡要描述]:List分頁工具初始化<br/>
* [詳細描述]:<br/>
*
* @param list : 待分頁的數據集
* @param pageSize : 每頁數
* @return xiaolinlin 2020/1/15 - 10:02
**/
public ListPageUtil(List<T> list, int pageSize)
{
if (null == list || 0 == list.size())
{
throw new UnsupportedOperationException("List can not null!");
}
if (0 == pageSize)
{
throw new UnsupportedOperationException("Page size can not 0");
}
this.list = new CopyOnWriteArrayList<>(list);
this.listSize = list.size();
if (pageSize > listSize)
{
this.pageSize = listSize;
}
else
{
this.pageSize = pageSize;
}
this.pageCount = listSize / pageSize;
this.pageCount = listSize % pageSize == 0 ? pageCount : pageCount + 1;
this.index = 0;
}
/**
* [簡要描述]:獲取首頁<br/>
* [詳細描述]:<br/>
*
* @return java.util.List<T>
* xiaolinlin 2020/1/15 - 10:02
**/
public List<T> getFistPage()
{
return list.subList(0, pageSize);
}
/**
* [簡要描述]:獲取最後一頁<br/>
* [詳細描述]:<br/>
*
* @return java.util.List<T>
* xiaolinlin 2020/1/15 - 10:03
**/
public List<T> getLastPage()
{
return list.subList((pageCount - 1) * pageSize, listSize);
}
/**
* [簡要描述]:獲取下一頁<br/>
* [詳細描述]:<br/>
*
* @return java.util.List<T>
* xiaolinlin 2020/1/15 - 10:03
**/
public List<T> nextPage()
{
List<T> subList = null;
if (index == pageCount - 1)
{
subList = list.subList(index * pageSize, listSize);
}
else
{
subList = list.subList(index * pageSize, (index + 1) * pageSize);
}
index++;
return subList;
}
/**
* [簡要描述]:是否有下一頁<br/>
* [詳細描述]:<br/>
*
* @return boolean
* xiaolinlin 2020/1/15 - 10:03
**/
public boolean hasNext()
{
return index < pageCount;
}
/**
* [簡要描述]:獲取總頁數<br/>
* [詳細描述]:<br/>
*
* @return int
* xiaolinlin 2020/1/15 - 10:03
**/
public int getPageCount()
{
return pageCount;
}
/**
* [簡要描述]:獲取每頁數<br/>
* [詳細描述]:<br/>
*
* @return int
* xiaolinlin 2020/1/15 - 10:03
**/
public int getPageSize()
{
return pageSize;
}
/**
* [簡要描述]:獲取當前頁數<br/>
* [詳細描述]:<br/>
*
* @return int
* xiaolinlin 2020/1/15 - 10:03
**/
public int getIndex()
{
return index + 1;
}
/**
* [簡要描述]:獲取帶分頁的數據總數<br/>
* [詳細描述]:<br/>
*
* @return int
* xiaolinlin 2020/1/15 - 10:04
**/
public int getListSize()
{
return listSize;
}
public static void main(String[] args)
{
List<Integer> list = new ArrayList<>();
int length = 23;
for (int i = 0; i < length; i++)
{
list.add(i);
}
int pageSize = 30;
System.out.println(list);
ListPageUtil<Integer> listPageUtil = new ListPageUtil<>(list, pageSize);
System.out.println("List size: " + listPageUtil.getListSize());
System.out.println("Page count: " + listPageUtil.getPageCount());
System.out.println("Page size: " + listPageUtil.getPageSize());
System.out.println("First page: " + listPageUtil.getFistPage());
System.out.println("Last page: " + listPageUtil.getLastPage());
while (listPageUtil.hasNext())
{
System.out.println("Page index: " + listPageUtil.getIndex());
System.out.println("Next page: " + listPageUtil.nextPage());
}
}
}