java - Pageable 的自定义实现
问题描述
我需要创建带有分页到数据库的请求的自定义实现。我能够从数据库中获取所有对象的列表并操作该列表。这是 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 Spring 对象一样工作,但是实现很糟糕,我得到了意想不到的结果。
例如,如果列表有 10 个条目,页面为 0,大小为 3,我将从列表中获取前三个对象。如果页面为 1 且大小为 3,我将获得条目 4、5、6,依此类推
解决方案
请尝试以下代码:
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;
}
推荐阅读
- openam - 更改 OpenAm 中的 JWT 令牌组成
- flutter - 如何在flutter中使用reactive_forms ReactiveFormArray?
- parsing - 如何在 Haskell 中与 Data.Text 进行模式匹配?
- python - 名称未在 Visual Studio 上定义
- javascript - NextAuth.js - 自定义提供程序 - 刷新令牌流
- javascript - 如何检查条件数组中的值?
- swift - 存储在 CoreData 中的应用内购买回调函数
- javascript - 对于控制台中的相等字符串,javascript 字符串比较不返回 true [已解决]
- excel - 如何正确地将 VBA 引用添加到适用于 Windows 和 macOS 的 VBA 加载项
- python - 从 API 接收的 django 问题