java8的stream实现分页查询【附带排序,看不懂你找我】

it2023-11-03  77

需求描述

今天遇到一个需求,做一个排行榜,要求是:用给定的一个时间段中,每个人最好的成绩,进行比较,然后做分页。所以这里就需要再service层自己做分页了。

代码

/** * @param pageNo 页码 * @param pageSize 每页数量 */ @Override public List<GroupRankingListModel> selectGroupRankingList(Integer pageNo, Integer pageSize) { //判断页的大小 if(pageSize<=0) { return null; } //比较后,需要排序的结果 List<GroupRankingListModel> returnList= new ArrayList<>(); //分页检查 pageNo = pagingCheck(pageNo, pageSize, showRankingListLine(returnList.size())); //降序,我的Model是:GroupRankingListModel,例如以result字段进行排序 //先排序,然后跳过前面的数据,然后截取 returnPersonResult=returnPersonResult.stream(). sorted(Comparator.comparing(GroupRankingListModel::getResult)). skip((pageNo-1)*pageSize). limit(pageSize). collect(Collectors.toList()); return returnPersonResult; } /** * 检查查询的页数 * @param pageNo 页码 * @param pageSize 页大小 * @param sumCount 总记录数字 * @return 页码 */ public Integer pagingCheck(Integer pageNo,Integer pageSize,Integer sumCount) { //一、如果传入的是负值,则将值改成默认值1 if(pageNo<=0) { return 1; } //二、如果传入的值大于最大的页数 //1.求出最大的页数 int maxPageCount; //如果一页正好放下,则就直接除 if (sumCount %pageSize == 0) { maxPageCount = sumCount / pageSize; } //如果一页放不下,则直接+1 else { maxPageCount = (sumCount / pageSize)+1; } //2.如果pageNo比最大页数还大, if(maxPageCount<pageNo) { return maxPageCount; } return pageNo; }

总结

第一个段代码是核心代码,主要是实现java8的新特性stream流实现分页查询第二个代代码的主要功能是校验页数,这里将页的大小作为了除数,所以也要对页的大小进行判断,防止出现/0的情况。
最新回复(0)