我需要创建一个自定义实现的请求分页到数据库。我能够从数据库中获取所有对象的列表并操作这个列表。这就是PageableDto的样子:
public class PageableDto {
private Integer page;
private Integer size;
}这就是如何实现返回分页对象列表的函数。
private List<RequestDto> doPagination(PageableDto pageable, List<RequestDto> requests) {
List<RequestDto> paginatedList = new ArrayList<>();
Integer page = pageable.getPage();
Integer size = pageable.getSize();
if (page == 0 || page == 1) {
for (int i = 0 ; i < size ; i++) {
if (i < requests.size()) {
paginatedList.add(requests.get(i));
} else {
return paginatedList;
}
}
return paginatedList;
}
int startIndex = size * (page - 1);
int endIndex = startIndex + size;
for (int i = startIndex; i < endIndex ; i++) {
if (i < requests.size()) {
paginatedList.add(requests.get(i));
} else {
return paginatedList;
}
}
return paginatedList;
} 我试图使它像实际的Pageable对象一样工作,但是实现很糟糕,而且我得到了意想不到的结果。
例如,如果列表包含10个条目,而页面为0,大小为3,则将从列表中获取前三个对象。如果页面为1,大小为为3,我将获得条目4、5、6等等。
发布于 2020-07-15 11:04:26
请尝试使用以下代码:
private List<RequestDto> doPagination(PageableDto pageable, List<RequestDto> requests) {
List<RequestDto> paginatedList;
Integer page = pageable.getPage();
Integer size = pageable.getSize();
int offset = page * size;
if(requests.size()>offset){
if(requests.size()>(offset+size)){
paginatedList = requests.subList(offset, offset+size);
}else{
paginatedList = requests.subList(offset, requests.size());
}
}else{
paginatedList = new ArrayList<>();
}
return paginatedList;
}https://stackoverflow.com/questions/62912921
复制相似问题