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

news2024/11/28 18:56:33

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

正序排序结果

在这里插入图片描述

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

倒序排序结果如下

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1448218.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ //练习 6.12 改写6.2.1节中练习6.10(第188页)的程序,使用引用而非指针交换两个整数的值。你觉得哪种方法更易于使用呢?为什么?

C Primer&#xff08;第5版&#xff09; 练习 6.12 练习 6.12 改写6.2.1节中练习6.10&#xff08;第188页&#xff09;的程序&#xff0c;使用引用而非指针交换两个整数的值。你觉得哪种方法更易于使用呢&#xff1f;为什么&#xff1f; 环境&#xff1a;Linux Ubuntu&#x…

Docker关于conda环境的导出和导入

Docker关于conda环境的导出和导入 1、常用命令&#xff1a;2、环境导出&#xff1a;3、两个服务器之间的文件传输命令&#xff1a;4、环境导入&#xff1a;5、快速进入容器6、其他问题解决记录&#xff1a; 1、常用命令&#xff1a; docker pull -- 从远程仓库将镜像下载至本地…

医疗相关名词,医疗名词整理

1.系统类&#xff1a; HIS Hospital Information System&#xff0c;医院信息系统&#xff0c;在国际学术界已公认为新兴的医学信息学(Medical Informatics)的重要分支。美国该领域的著名教授Morris.Collen于1988年曾著文为医院信息系统下了如下定义&#xff1a;利用电子计算…

[Linux开发工具]项目自动化构建工具-make/Makefile

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1.背景2.依赖关系和依…

error An unexpected error occurred: “https://registry.npm.taobao.org

背景&#xff1a; 想使用yarn命令结果报错 问题原因&#xff1a; 原来证书到期了 http://registry.npm.taobao.org/ 把这个放到浏览器搜索的时候自动换成https://registry.npmmirror.com/ 方案&#xff1a; npm cache clean --forcenpm config set registry https://registry…

Windows 虚拟桌面信息(一)分析注册表

目录 前言 一、理论分析 二、代码实现 总结 本文为原创文章&#xff0c;转载请注明出处&#xff1a; https://blog.csdn.net/qq_59075481/article/details/136110636 前言 Win 10/11 的虚拟桌面微软暂时没有开放接口&#xff0c;有很多信息对开发者是闭塞的&#xff0c;…

Qt QWidget以及各种控件、布局 核心属性(适合入门使用时查询)

目录 1. QWidget核心属性 2. 按钮类控件 2.1 PushButton 核心属性 2.2 RadioButton 核心属性 2.3 CheckBox 和 Tool Button 核心属性 3. 显示类控件 3.1 Label 核心属性 3.2 LCDNumber 核心属性 3.3 ProgressBar 核心属性 3.4 Calendar Widget 核心属性 4. 输入类控…

Photoshop 中的“彩蛋”

在 Photoshop 中隐藏了几个“彩蛋” Easter Eggs&#xff0c;是开发者留下的小秘密或玩笑功能&#xff0c;也许是他们在紧张的开发过程中的一种自我调节吧&#xff0c;就如复活节彩蛋一样&#xff0c;同样也可以给 Photoshop 的用户们带来一点小“惊喜”。 这些彩蛋通常以有趣的…

上位机图像处理和嵌入式模块部署(借鉴与学习)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 对于很多学院派的同学来说&#xff0c;他们对市场的感觉一般是比较弱的。如果写一个软件的话&#xff0c;或者说开发一个项目的话&#xff0c;他们…

【C++关联式容器】unordered_map

目录 unordered_map 1. pair类型 2. 关联式容器额外的类型别名 3. 哈希桶 4. 无序容器对关键字类型的要求 5. Member functions 5.1 constructor、destructor、operator 5.1.1 constructor 5.1.2 destructor 5.1.3 operator 5.2 Capacity ​5.2.1 empty 5.2.2 si…

C/C++内存管理:new、delete功能及原理实现

目录 一、C/C内存分布 二、C中内存管理方式 2.1new/delete操作内置类型 2.2 new和delete操作自定义类型 三、operator new与operator delete函数 四、new和delete的实现原理 4.1内置类型 4.2自定义类型 五、定位new 一、C/C内存分布 int globalVar 1; static int sta…

Java学习第十三节之三种初始化和内存分析

三种初始化 package array;public class ArrayDemo02 {public static void main(String[] args) {//静态初始化&#xff1b;创建赋值int[] a {1, 2, 3, 4, 5, 6, 7, 8};System.out.println(a[0]);for (int i 0; i <a.length; i) {System.out.println(a[i]);}//动态初始化…

你的电脑关机吗

目录 程序员为什么不喜欢关电脑&#xff1f; 电脑长时间不关机会怎样? 电脑卡顿 中度风险 硬件损耗 能源浪费 散热问题 软件问题 网络安全问题 程序员为什么不喜欢关电脑&#xff1f; 大部分人都会选择将电脑进行关机操作。其实这不难理解&#xff0c;毕竟人类都需要…

Qt初使用(使用Qt创建项目,在创建的项目中添加类,Qt中输出内容到控制台,设置窗口大小和窗口标题,Qt查看说明文档)

目录 一.创建带模板的项目新建项目运行在文件中查看该项目文件 二.在创建好的项目中添加类三.创建空项目&#xff08;不使用自带的模板&#xff09;四.Qt中输出内容到控制台五.设置窗口大小 , 窗口标题 ,固定窗口大小QWidget组件的说明 六.Pro文件帮助文档 按windows键&#xf…

1_opencv3环境搭建与测试

之前2020年5月写过一次&#xff0c;时隔3年多&#xff0c;有机会再重新写一次。相比之前&#xff0c;应该是有一点儿进步的。之前是使用默认安装路径&#xff0c;所以无需配置共享库的搜索路径。这次是自定义安装路径&#xff0c;略有区别。随着写程序的时间增长&#xff0c;编…

LeetCode Python - 14.最长公共前缀

目录 题目答案运行结果 题目 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 示例 1&#xff1a; 输入&#xff1a;strs [“flower”,“flow”,“flight”] 输出&#xff1a;“fl” 示例 2&#xff1a; 输入&#xff…

react 【二】 setState/react性能优化/dom操作

文章目录 1、setState1.1 setState的三种用法1.2 setState为什么是异步 2、React性能优化2.1 react的更新机制2.2 如何优化性能2.2.1 shouldComponentUpdate2.2.2 PureComponent2.2.3 memo 3、不可变数据的力量4、dom操作4.1 通过ref获取dom的三种方式4.2 执行子组件的方法&…

关于node与node-sass那些事

昨晚找了之前的一个项目想要复习下&#xff0c;结果npm i报错&#xff0c;大致意思就是noda-sass的版本和node的对不上&#xff0c;那怎么办呢&#xff1a; 1.换node版本&#xff0c;那好吧&#xff0c;首先要明白&#xff0c;对应的版本关系 2.然后我开始用nvm换node版本&am…

猫头虎分享: 探索软件系统架构的革新之路

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

【AI视野·今日Sound 声学论文速览 第四十九期】Wed, 17 Jan 2024

AI视野今日CS.Sound 声学论文速览 Wed, 17 Jan 2024 Totally 23 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers From Coarse to Fine: Efficient Training for Audio Spectrogram Transformers Authors Jiu Feng, Mehmet Hamza Erol, Joon Son Chung,…