需求背景:
最近写了一个适配项目,需要对接N个第三方系统,有的第三方数据是自带物理分页,有的则是数据直接全部返回。如果提需求,沟通和效率都是大打折扣,所以自己实现一个内存分页工具,在这里记录一下。
package common.utils;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author hetao
* @date 2021/4/23 18:18
* @description 内存分页
*/
public class MemoryPager<T> {
/**
* 总供多少页
*/
private int pageCount;
private List<T> data;
/**
* 第几页
*/
private int pageNum;
/**
* 页码大小
*/
private int pageSize;
/**
* 总共有多少条数据
*/
private int total;
public MemoryPager(List<T> data, int pageNum, int pageSize) {
this.data = data;
this.pageNum = pageNum > 0 ? pageNum : 1;
this.pageSize = pageSize;
//初始化总条数
if(ObjectUtils.isEmpty(data)){
this.total = 0;
}else{
this.total = data.size();
}
}
public List<T> getData() {
if (CollectionUtils.isEmpty(this.data)) {
return Collections.emptyList();
}
int totalCount = this.data.size();
int remainder = totalCount % pageSize;
this.pageCount = (remainder > 0) ? totalCount/pageSize + 1 : totalCount/pageSize;
if (remainder == 0) {
return this.data.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
} else {
if (pageNum == pageCount) {
return this.data.stream().skip((pageNum - 1) * pageSize).limit(totalCount).collect(Collectors.toList());
} else {
return this.data.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
}
}
}
public int getPageNum() {
return pageNum;
}
public int getPageSize() {
return pageSize;
}
public int getPageCount() {
return pageCount;
}
public int getTotal() {
return total;
}
}
备注:数据量大了还是要考虑物理分页的,这个内存分页只是适用于小数据量的场景,如有问题,欢迎微信交流,微信:hetaolife