java获取分页信息,并根据置顶排序

public ResultVo<IPage<Obj>> getObj (Page<Obj> page, Obj obj) {
    QueryWrapper<Obj> queryWrapper = new QueryWrapper<Obj>()
            //可以加条件查询
            .orderByDesc("create_time"); // 基本排序

    IPage<Obj> pageList = Service.page(page, queryWrapper);//开始分页

    List<Obj> sortedList = pageList.getRecords().stream()//pageList 是从数据库中获取的分页结果,其中 getRecords() 方法返回了一个包含所有记录的列表(List<Obj>)。
            .sorted((p1, p2) -> {
                if ("1".equals(p1.getTop()) && "1".equals(p2.getTop())) {
                    return p2.getToptime().compareTo(p1.getToptime());
                } else if ("1".equals(p1.getTop())) {
                    return -1;
                } else if ("1".equals(p2.getTop())) {
                    return 1;
                } else {
                    return p2.getCreateTime().compareTo(p1.getCreateTime());
                }
            })
            .collect(Collectors.toList());

    IPage<Obj> sortedPage = new Page<>(page.getCurrent(), page.getSize(), pageList.getTotal());
    sortedPage.setRecords(sortedList);//new Page<>(page.getCurrent(), page.getSize(), pageList.getTotal()):使用原始分页对象的当前页、每页大小和总记录数创建一个新的分页对象。
//sortedPage.setRecords(sortedList):将排序后的列表设置到新的分页对象中。

    return ResultVo.success(sortedPage);
}

接下来详细讲述下使用内存排序

优点:

  • 灵活性:可以处理复杂的排序逻辑,这些逻辑可能在SQL中难以实现。
  • 调试:在Java中调试排序逻辑通常比较简单。

缺点:

  • 性能:对于大数据集,在内存中进行排序可能会影响性能,尤其是在数据量较大的情况下。

在 Java 的排序机制中,Comparator 是用来定义两个对象的排序顺序的。当你使用 Comparator 接口的 compare 方法时,它的返回值决定了这两个对象的相对顺序。具体地:

  • return -1 表示第一个对象应该排在第二个对象之前。
  • return 1 表示第一个对象应该排在第二个对象之后。
  • return 0 表示两个对象的顺序可以互换(它们相等)。

详细解释:

假设我们有两个对象 p1p2,我们希望通过比较它们来确定它们的顺序。

  • return -1:表示 p1 应该排在 p2 之前。
  • return 1:表示 p1 应该排在 p2 之后。
  • return 0:表示 p1p2 在排序中是等价的(它们的位置不需要交换)。

拿我的排序举例

List<Obj> sortedList = pageList.getRecords().stream()
        .sorted((p1, p2) -> {
            if ("1".equals(p1.getTop()) && "1".equals(p2.getTop())) {
                return p2.getToptime().compareTo(p1.getToptime());
            } else if ("1".equals(p1.getTop())) {
                return -1;
            } else if ("1".equals(p2.getTop())) {
                return 1;
            } else {
                return p2.getCreateTime().compareTo(p1.getCreateTime());
            }
        })
        .collect(Collectors.toList());

排序逻辑分解:

  1. if ("1".equals(p1.getProductTop()) && "1".equals(p2.getProductTop())):

    • 如果 p1p2 都是 productTop'1' 的记录,那么就按照 product_toptime 排序(降序)。
    • p2.getProductToptime().compareTo(p1.getProductToptime())p2product_toptimep1product_toptime 进行比较。因为 p2 的时间在前,所以如果结果为负值,则 p2 排在 p1 前面。
  2. else if ("1".equals(p1.getProductTop())):

    • 如果 p1productTop'1'p2productTop 不是 '1',那么 p1 应该排在 p2 前面。
    • return -1 表示 p1 应该排在 p2 前面。
  3. else if ("1".equals(p2.getProductTop())):

    • 如果 p2productTop'1'p1productTop 不是 '1',那么 p2 应该排在 p1 前面。
    • return 1 表示 p2 应该排在 p1 前面。
  4. else:

    • 如果 p1p2 都不是 productTop'1' 的记录,则按 create_time 排序(降序)。
    • p2.getCreateTime().compareTo(p1.getCreateTime())p2create_time 在前,所以如果结果为负值,则 p2 排在 p1 前面。
  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WAZYY0619

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值