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 {@Serialprivate 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.hqwc.cn/news/468678.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hive on Spark配置

前提条件 1、安装好Hive&#xff0c;参考&#xff1a;Hive安装部署-CSDN博客 2、下载好Spark安装包&#xff0c;链接&#xff1a;https://pan.baidu.com/s/1plIBKPUAv79WJxBSbdPODw?pwd6666 3、将Spark安装包通过xftp上传到/opt/software 安装部署Spark 1、解压spark-3.3…

第二部分阶段总结

第二部分阶段总结 1.知识补充1.1 nolocal关键字1.2 yield from1.3 深浅拷贝 2.阶段总结3.考试题 1.知识补充 1.1 nolocal关键字 在之前的课程中&#xff0c;我们学过global关键字。 name rootdef outer():name "武沛齐"def inner():global namename 123inner()…

Web安全研究(六)

文章目录 HideNoSeek: Camouflaging(隐藏) Malicious JavaScript in Benign ASTs文章结构Introjs obfuscationmethodologyExample HideNoSeek: Camouflaging(隐藏) Malicious JavaScript in Benign ASTs CCS 2019 CISPA 恶意软件领域&#xff0c;基于学习的系统已经非常流行&am…

AI论文速读 | 2024【综述】图神经网络在智能交通系统中的应用

论文标题&#xff1a;A Survey on Graph Neural Networks in Intelligent Transportation Systems 链接&#xff1a;https://arxiv.org/abs/2401.00713 作者&#xff1a;Hourun Li, Yusheng Zhao, Zhengyang Mao, Yifang Qin, Zhiping Xiao, Jiaqi Feng, Yiyang Gu, Wei Ju, …

Linux命令行全景指南:从入门到实践,掌握命令行的力量

目录 知识梳理思维导图&#xff1a; linux命令入门 为什么要学Linux命令 什么是终端 什么是命令 关于Linux命令的语法 tab键补全 关于命令提示符 特殊目录 常见重要目录 /opt /home /root /etc /var/log/ man命令 shutdown命令 history命令 which命令 bash…

Web前端开发

一、概述 1.1 什么是HTML、CSS&#xff1f; 二、HTML 2.1 HTML快速入门 2.2 基础标签和样式 2.2.1 标题 &#xff08;1&#xff09;标题排版 输入&#xff01;加回车&#xff0c;直接生成HTML基本结构标签 。 <!-- 声明当前文档类型 --> <!DOCTYPE html> &l…

遇到太多的Windows问题怎么办?这里提供几个修复工具

“部署映像服务和管理”工具(DISM)是一个有用且高级的工具,用于扫描、更改和修复任何Windows系统问题。许多操作系统问题,如性能差、启动问题或特定崩溃,都可以归结为损坏的系统文件,而此命令工具能够解决这些问题。 如何检查文件系统 在运行DISM修复之前,重要的是运行…

Mac 版 Excel 和 Windows 版 Excel的区别

Excel是一款由微软公司开发的电子表格程序&#xff0c;广泛应用于数据处理、分析和可视化等领域。它提供了丰富的功能和工具&#xff0c;包括公式、函数、图表和数据透视表等&#xff0c;帮助用户高效地处理和管理大量数据。同时&#xff0c;Excel还支持与其他Office应用程序的…

算法讲解之字符串

前言&#xff1a; 本文主要讲解算法中和字符串结合的题目&#xff0c;跟字符串结合的算法题种类丰富&#xff0c;主要是跟别的算法结合&#xff0c;下面介绍几道比较经典的题目~ 第一道&#xff1a;14. 最长公共前缀 题目描述&#xff1a; 编写一个函数来查找字符串数组中的…

使用Vue.js输出一个hello world

导入vue.js <script src"https://cdn.jsdelivr.net/npm/vue2/dist/vue.js"></script> 创建一个标签 <div id"app">{{message}}</div> 接管标签内容&#xff0c;创建vue实例 <script type"text/javascript">va…

掌握Pandas.to_datetime函数:时间序列数据处理的利器【第78篇—Pandas.to_datetime函数】

掌握Pandas.to_datetime函数&#xff1a;时间序列数据处理的利器 在数据处理和分析中&#xff0c;时间序列数据的处理是一个重要的环节。Pandas库中的to_datetime函数为我们提供了一个方便而强大的工具&#xff0c;用于将字符串或数字等格式的日期转换为Pandas中的datetime对象…

一探Lepton Search究竟

2024年1月25日&#xff0c;阿里巴巴原技术副总裁在 Twitter 上称用不到 500 行 Python 代码实现了 AI 对话搜索引擎&#xff0c;并在27日附上了开源地址&#xff1a;https://github.com/leptonai/search_with_lepton&#xff0c;截止春节期间已经5.8K的Star。 Twitter截图 Comm…