Java17之使用Lambda表达式对对象集合中指定的字段进行排序

Java17之使用Lambda表达式对对象集合中指定的字段进行排序

1. 集合对象排序

  1. Java8起可用 List 的 sort 方法进行排序,形参为函数式接口Comparator

  2. 可通过Comparator.comparing指定排序字段,如果需要指定多个字段排序,可使用thenComparing 来指定。

  3. 排序规则:

  • 默认使用正序规则排序,Comparator.naturalOrder()
  • 如果想按倒序规则排序可以使用 Comparator.reverseOrder() 来指定。
  1. 以下案例使用Mybaits-plus查询数据,并对对象集合中指定的多个字段进行排序。

1. Java实体类

标注了Mybaits-plus及Lombok注解的实体类CheckEntrustProject.java如下

package com.yuan.entrust.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serial;

@Data
@EqualsAndHashCode(callSuper = true)
@TableName("check_entrust_project")
public class CheckEntrustProject {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @TableId(value = "id")
    private Long id;

    /**
     * 项目id
     */
    private Long projectId;

    /**
     * 委托id
     */
    private Long entrustId;

    /**
     * 项目名称
     */
    private String projectName;

    /**
     * 天数
     */
    private Integer days;

    /**
     * 频次
     */
    private Integer frequency;

    /**
     * total = 天数 * 频次
     */
    @TableField(exist = false)
    private Integer total;

    /**
     * 点位名称
     */
    @TableField(exist = false)
    private String pointName;

    /**
     * 检测类别(项目分类)
     */
    @TableField(exist = false)
    private String checkCategory;

    /**
     * 检查类型(项目类型)
     */
    @TableField(exist = false)
    private String checkType;
}

2. 正序排序

@Autowired
private final CheckEntrustPointMapper checkEntrustPointMapper;
@GetMapping("/taskReceiveList/{entrustId}")
 public List<CheckEntrustProject> taskReceiveList(@PathVariable("entrustId") long entrustId) {
        QueryWrapper<CheckEntrustProject> projectQueryWrapper = new QueryWrapper<>();
        projectQueryWrapper.eq("entrust_id", entrustId);
        projectQueryWrapper.eq("del_flag", 0);
        projectQueryWrapper.orderByAsc("project_name");
        List<CheckEntrustProject> checkEntrustProjectList = checkEntrustProjectMapper.selectList(projectQueryWrapper);
        
        //默认使用Comparator.naturalOrder()排序,根据pointName、checkCategory、checkType等正序排序
        checkEntrustProjectList.sort(Comparator.comparing(CheckEntrustProject::getPointName)
            .thenComparing(CheckEntrustProject::getCheckCategory)
            .thenComparing(CheckEntrustProject::getCheckType));
        return checkEntrustProjectList;
    }  

正序排序结果

在这里插入图片描述

3.倒序排序

@Autowired
private final CheckEntrustPointMapper checkEntrustPointMapper;
@GetMapping("/taskReceiveList/{entrustId}") 
 public List<CheckEntrustProject> taskReceiveListxx(@PathVariable("entrustId") long entrustId) {
        QueryWrapper<CheckEntrustProject> projectQueryWrapper = new QueryWrapper<>();
        projectQueryWrapper.eq("entrust_id", entrustId);
        projectQueryWrapper.eq("del_flag", 0);
        projectQueryWrapper.orderByAsc("project_name");
        List<CheckEntrustProject> checkEntrustProjectList = checkEntrustProjectMapper.selectList(projectQueryWrapper);

       
        //使用Comparator.reverseOrder()指定倒序排序规则,根据pointName、checkCategory、checkType等倒序排序
 checkEntrustProjectList.sort(Comparator.comparing(CheckEntrustProject::getPointName,Comparator.reverseOrder())
            .thenComparing(CheckEntrustProject::getCheckCategory,Comparator.reverseOrder())
            .thenComparing(CheckEntrustProject::getCheckType,Comparator.reverseOrder()));
        return checkEntrustProjectList;
    }

倒序排序结果如下

在这里插入图片描述

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值