需求描述
今天遇到一个需求,做一个排行榜,要求是:用给定的一个时间段中,每个人最好的成绩,进行比较,然后做分页。所以这里就需要再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的情况。