Java的两种分页实现
背景介绍
在后端开发时,查询结果返回的是list集合,而前端是要分页进行展示,这里就需要进行分页处理,以下介绍两种方法,供参考。 分页,处理好分页的参数:totalCount、pageSize 和 pageNo
1、方法一
拼接 PageData 数据结构所需参数,包括 总数 totalCount 、页码pageNo 、页大小 pageSize 、开始页 beginIndex 和 结束页 endIndex。
/**
* @param result
* @param query
*/
public static <T> PageData listToPageData(List<T> result, Query query) {
PageData pageData = new PageData();
if (CollectionUtils.isEmpty(result)) {
pageData.setTotalCount(0);
pageData.setPageNo(1);
pageData.setPageSize(query.getPageSize());
pageData.setItems(Collections.emptyList());
return pageData;
}
// 分页各参数
int totalCount = result.size();
int pageNo = query.getPageNo();
int pageSize = query.getPageSize();
int beginIndex = (pageNo - 1) * pageSize;
int endIndex = pageNo * pageSize - 1;
// 赋值
pageData.setTotalCount(totalCount);
pageData.setPageNo(pageNo);
pageData.setPageSize(pageSize);
List<T> sublist;
if (beginIndex >= totalCount) {
sublist = Collections.emptyList();
} else if (endIndex < totalCount) {
sublist = result.subList(beginIndex, endIndex + 1);
} else {
sublist = result.subList(beginIndex, totalCount);
}
pageData.setItems(sublist);
return pageData;
}
2、方法二
利用 java.util.List 的 ==subList== 方法,从0开始,含头不含尾。
// 本质上是返回原来list的从[fromIndex, toIndex)之间的视图
List<T> subList(int fromIndex, int toIndex);
// 若list大小改变,则可以通过clear方法来恢复
list.subList(fromIndex, toIndex).clear();
分页实现的代码如下所示。
/**
* @param result
* @param query
*/
public static <T> PageData listToPageData(List<T> result, Query query) {
List<T> data = result.subList(query.getPageSize() * (query.getPageNo() - 1),
result.size() > query.getPageSize() * query.getPageNo() ?
query.getPageSize() * query.getPageNo() : result.size());
PageData pageData = new PageData(data, result.size(), query.getPageNo(), query.getPageSize());
return pageData;
}
任何对子列表的操作最终都会反映到原列表中,即list的大小可能会变化。