List封装为Page对象

最近在项目中,经常碰到这样的情况,就是说前台需要page对象,但是我后台page查询出来的数据(entity类)并不是前台需要的数据(dto),还需要二次封装,前台要page对象啊,习惯了用工具类,咋自己封装一个page对象哦?

所有就有了这篇文章,实际上思路都是一样的,就是我返回的数据肯定是个Page对象,我查出来的数据要么是Page,要么是List,是page就getContent一下获取到List,然后再由List转为page对象;
我自己找到的方法:

首先要有分页必备的Pageable:

Pageable pageable = new PageRequest(currentPage - 1, pageSize);

然后就是主体了:

   private Page<SsoUserInfo> getPageSsoUserInfo(Pageable pageable, List<SsoUserInfo> userInfosList) {
        if (pageable.getOffset() > userInfosList.size()) {
            long total = 0l;
            PageImpl<SsoUserInfo> emptyPage = new PageImpl<>(Lists.newArrayList(), pageable, total);
            return emptyPage;
        }
        if (pageable.getOffset() <= userInfosList.size() && pageable.getOffset() + pageable.getPageSize() > userInfosList.size()) {
            List<SsoUserInfo> ssoUserInfos = userInfosList.subList((int) pageable.getOffset(), userInfosList.size());
            PageImpl<SsoUserInfo> ssoUserInfoPage = new PageImpl<>(ssoUserInfos, pageable, userInfosList.size());
            return ssoUserInfoPage;
        }
        List<SsoUserInfo> ssoUserInfos = userInfosList.subList((int) pageable.getOffset(), (int) (pageable.getOffset() + pageable.getPageSize()));
        PageImpl<SsoUserInfo> ssoUserInfoPage = new PageImpl<>(ssoUserInfos, pageable, userInfosList.size());
        return ssoUserInfoPage;
    }

之所以会写这篇文章,因为我今天翻代码的时候,发现了我同事写的同样作用的代码:

Pageable pageable = new PageRequest(formBean.getCurrentPage() - 1, formBean.getPageSize(), sort);
        Page<CmsContent> page = contentDao.findAll(specification, pageable);
        List<ContentDto> list = new ArrayList<>();
        for (CmsContent cmsContent : page.getContent()) {
            ContentDto text = dtoByContent(cmsContent);
            list.add(text);
        }
        return new PageImpl<ContentDto>(list, page.getPageable(), page.getTotalElements());

mmp!还是见识少啊,但是看了下源码,觉得官方文档真的是个好东西啊

 

posted @ 2020-05-28 16:30  o_osky  阅读(3392)  评论(0编辑  收藏  举报