欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用MybatisPlus对List数据进行分页

程序员文章站 2024-01-20 22:10:40
...

使用MybatisPlus对List数据进行分页

情形:客户提出需求,列表展示的数据需要先把所有的数据进行排序,然后再展示。分别有五个类别的数据,每个类别的排序条件不同。我寻思着,这还不简单。直接调用mybatisplus提供的selectPage方法,然后对查出的数据按照要求排序不就行了。数据查询处理之后,当前页的数据是进行了排序,但是并没有跟下一页的数据进行比对。所以,应该是先查出所有数据,然后在进行分页。

1、使用mybatisplus提供的selectList方法,查询所有数据。

 List<EntranceVillage> villageList = villageMapper.selectList(new QueryWrapper<>());

2、使用stream流根据类别的排序条件进行排序

List<EntranceVillage> first = villageList.stream().filter(entranceVillage ->
                EntranceConstants.ENTRANCE_FIRST.equals(entranceVillage.getApplyType()))
                .distinct()
                .collect(Collectors.toList());
List<EntranceVillage> second = villageList.stream().filter(entranceVillage ->
                EntranceConstants.ENTRANCE_FIRST.equals(entranceVillage.getApplyType()))
                .distinct()
                .sorted(Comparator.comparing(EntranceVillage::getCreateDate))
                .collect(Collectors.toList());
villageList.clear();
villageList.addAll(first);
villageList.addAll(second);

3、对数据进行计算处理,进行分页(计算方法借鉴于https://www.cnblogs.com/fengru/p/6703749.html

//当前页
int current = 1;
//每页数据条数
int size = 10;
Page<EntranceVillage> page = new Page<>(current,size);
int count = villageList.size();
List<EntranceVillage> pageList = new ArrayList<>();
//计算当前页第一条数据的下标
int currId = current>1 ? (current-1)*size:0;
for (int i=0; i<size && i<count - currId;i++){
    pageList.add(villageList.get(currId+i));
}
page.setSize(size);
page.setCurrent(current);
page.setTotal(count);
//计算分页总页数
page.setPages(count %10 == 0 ? count/10 :count/10+1);
page.setRecords(pageList);
相关标签: java