如何快速对List进行倒叙或正序排序(包含分页排序)

        

很多时候单表查询接口我们没有那么多复杂的操作,我们一般都会直接这么写

List<YourEntity> results = yourEntityDao.select();

这么写既快捷又方便,很多简单的查询一般都回这样写,但是如果想对id进行一个排序呢?

那很多人应该会像下边这样写

Example example = new Example(YourEntity.class);
        example.setOrderByClause("id desc");
        Example.Criteria criteria = example.createCriteria();
        if (drpr.getDetectionCode()!= null) {
            criteria.andLike("detectionCode", "%" + drpr.getDetectionCode() + "%");
        }
        if (drpr.getBatch()!= null) {
            criteria.andLike("batch", "%" + drpr.getBatch() + "%");
        }
        if (drpr.getDetectionTime()!= null) {
            criteria.andLike("detectionTime", "%" + drpr.getDetectionTime() + "%");
        }
        if (drpr.getOperator()!= null) {
            criteria.andLike("operator", "%" + drpr.getOperator() + "%");
        }
        yourEntityDao.selectByExample(example);

这样写当然也可以,但是所有的参数我们都要定义一遍,如果正好这个表的参数很多,那岂不是会很麻烦,有没有简单一点的方法呢?当然有!

既然不能直接查出来就是排序好的,那为什么不查出来之后再排序呢?话不多说,我们直接上完整代码

List<YourEntity> results = yourEntityDao.select();
results.sort(Comparator.comparing(YourEntity::getYourProperty));//升序

results.sort(Comparator.comparing(YourEntity::getYourProperty).reversed());//降序

我们可以发现经过这样处理过后,数据已经是我们想要的顺序了,那么问题来了,如果这个数据需要分页呢,如果需要分页,那么结果出来你就会惊奇的发现,他只会将每个分好页的数据进行排序,并不会将所有的进行排序,那我们先查询、排序然后再进行分页呢?显然也是不行的,我们会发现分页直接失效了,因为PageHelper中startPage开启分页方法只对后面的sql查询起作用,我们后边并没有sql查询了,所以这个分页也就失效了

        List<YourEntity> results = yourEntityDao.select();
results.sort(Comparator.comparing(YourEntity::getYourProperty));//升序

results.sort(Comparator.comparing(YourEntity::getYourProperty).reversed());//降序
  com.github.pagehelper.Page<Result> resultPage = PageHelper.startPage(page.getPageNum(), page.getPageSize());
        return Result.data(resultPage.getTotal(), results);

那我们要怎么处理呢?其实很简单,我们直接上最终代码

  com.github.pagehelper.Page<Result> resultPage = PageHelper.startPage(page.getPageNum(), page.getPageSize()).setOrderBy("id desc");
        List<YourEntity> results = yourEntityDao.select();
        return Result.data(resultPage.getTotal(), results);

至此,完美解决

最后欢迎大家留言指出不足与错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值