首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可分页的自定义实现

可分页的自定义实现
EN

Stack Overflow用户
提问于 2020-07-15 10:32:43
回答 1查看 1K关注 0票数 1

我需要创建一个自定义实现的请求分页到数据库。我能够从数据库中获取所有对象的列表并操作这个列表。这就是PageableDto的样子:

代码语言:javascript
复制
public class PageableDto {

    private Integer page;
    private Integer size;
}

这就是如何实现返回分页对象列表的函数。

代码语言:javascript
复制
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等等。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-15 11:04:26

请尝试使用以下代码:

代码语言:javascript
复制
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;
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62912921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档