package com.visionsoft.logistics.utils;
import com.visionsoft.logistics.page.PageData;
import java.util.ArrayList;
import java.util.List;
/**
* @Description: List分页工具类
*/
public class ListToPageDataUntil {
/**
* 数据集合的分页方法,根据传入总共的数据跟页码,返回页码所需要显示多少条的数据
* <BR/>采用泛型的方法,即为,list中为什么类型的数据就返回什么类型的数据
* @param List 带有需要进行分页的数据集合
* @param page 第几页
* @param rows 显示多少条数据
* @return 进过分页之后返回的数据
*/
public static<T> PageData<T> getListToPageData(Integer page, Integer rows, List<T> List) {
PageData<T> data = new PageData<>();
List<T> datepaging = datepaging(List, page, rows);
//第几页,1开始
data.setPage(page);
//每页显示的条数
data.setPageSize(rows);
//总页数
int size = List.size();
int totalPage = size / rows;
data.setTotalPage(totalPage);
//总条数
data.setTotal(size);
//每页的内容
data.setRows(datepaging);
return data;
}
/**
* 数据集合的分页方法,根据传入总共的数据跟页码,返回页码所需要显示多少条的数据
* <BR/>采用泛型的方法,即为,list中为什么类型的数据就返回什么类型的数据
* @param list 带有需要进行分页的数据集合
* @param page 第几页
* @param rows 显示多少条数据
* @return 进过分页之后返回的数据
*/
private static <T> List<T> datepaging(List<T> list, Integer page, Integer rows) {
/*
* 经过测试发现当page为0或者小于时,也就是第0页时,程序会报错,所以需要处理一下page的值
* 先进行空值的判断,避免程序出现null异常
* 当page的值小于等于0时,我们让它的值为1
*/
//参数的校验 当传入过来的list集合为null时,先进行实例化
if (list == null) {
list = new ArrayList<T>();
}
//当传入过来的page为null时,先进行赋值操作
if ((Object) page == null) {
page = 1;
}
//当传入过来的rows为null时,先进行赋值操作
if ((Object) rows == null) {
rows = 1;
}
if (page <= 0) {
page = 1;
}
//记录一下数据一共有多少条
int totalitems = list.size();
//实例化一个接受分页处理之后的数据
List<T> afterList = new ArrayList<T>();
/*
* 进行分页处理,采用for循环的方式来进行处理
* 首先for循环中,i应该从哪里开始:i应该从 (当前是第几页 -1 乘以 条数) 开始
* 然后for循环应该到哪里结束,也就是i应该小于:判断(开始的索引+显示条数)是不是大于总条数,如果大于就是总条数,如果小于就是(开始的索引+显示条数)
* 然后让i++
*/
for (int i = (page - 1) * rows; i < (((page - 1) * rows) + rows > totalitems ? totalitems : ((page - 1) * rows) + rows); i++) {
//然后将数据存入afterList中
afterList.add(list.get(i));
}
//然后将处理后的数据集合进行返回
return afterList;
}
}