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

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

文章目录

  • Java17之使用Lambda表达式对对象集合中指定的字段进行排序
  • 1. 集合对象排序
    • 1. Java实体类
    • 2. 正序排序
    • 3.倒序排序

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;
    }  

正序排序结果

Java17之使用Lambda表达式对对象集合中指定的字段进行排序_第1张图片

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;
    }

倒序排序结果如下

Java17之使用Lambda表达式对对象集合中指定的字段进行排序_第2张图片

你可能感兴趣的:(Java17,MyBatis,Java17,Lambda表达式)