Java List集合 -- 最常用的两种排序方法

 现在有一个类

public class Person {private int id;private int age;private String name;public Person(int id, int age, String name) {this.id = id;this.age = age;this.name = name;}public int getId() {return id;}public int getAge() {return age;}public String getName() {return name;}@Overridepublic String toString() {return "Person{" +"id=" + id +", age=" + age +", name='" + name + '\'' +'}';}}

一个列表

public class Test {public static void main(String[] args) {List<Person> list = new ArrayList<Person>() {{add(new Person(1, 30, "北京"));add(new Person(2, 20, "西安"));add(new Person(3, 40, "上海"));}};}}

我们对该列表进行排序,则有如下两种最常用的方法

一、继承 Comparable 接口

我们让 Person 类实现 Comparable 接口,重写 compareTo 方法

public class Person implements Comparable<Person>{private int id;private int age;private String name;public Person(int id, int age, String name) {this.id = id;this.age = age;this.name = name;}public int getId() {return id;}public int getAge() {return age;}public String getName() {return name;}@Overridepublic String toString() {return "Person{" +"id=" + id +", age=" + age +", name='" + name + '\'' +'}';}@Overridepublic int compareTo(Person person) {//这是从小到大排序,如果是person.getAge() - this.getAge() 则是从大到小排序return this.getAge() - person.getAge();}
}

调用 Collections.sort(list) 方法进行排序

public class Test {public static void main(String[] args) {List<Person> list = new ArrayList<Person>() {{add(new Person(1, 30, "北京"));add(new Person(2, 20, "西安"));add(new Person(3, 40, "上海"));}};Collections.sort(list);list.forEach(person -> System.out.println(person));}}

运行结果

二、使用 Comparator比较器 排序

使用 Comparator比较器 无序修改原有的类,更加方便

我们查看 Collections 的 sort 方法

这边第二个参数就是我们要传入的比较器 Comparator

查看比较器源码 

我们看到 比较器 是一个接口,且有 @FunctionalInterface 注解,表明是函数式接口,者我们可以直接使用 Lambda 表达式

 Person 类无需再额外实现接口

public class Person{private int id;private int age;private String name;public Person(int id, int age, String name) {this.id = id;this.age = age;this.name = name;}public int getId() {return id;}public int getAge() {return age;}public String getName() {return name;}@Overridepublic String toString() {return "Person{" +"id=" + id +", age=" + age +", name='" + name + '\'' +'}';}
}

直接使用 Comparator 比较器 如下

public class Test {public static void main(String[] args) {List<Person> list = new ArrayList<Person>() {{add(new Person(1, 30, "北京"));add(new Person(2, 20, "西安"));add(new Person(3, 40, "上海"));}};Collections.sort(list,(Person person1,Person person2) -> {return person1.getAge() - person2.getAge();});list.forEach(person -> System.out.println(person));}}

 

 接着我们看 idea 将比较器置灰,并提示 Can be replaced with 'Comparator.comparingInt' 

 因为 Comparator 已经有现成的 从小到大排序 方法,直接Replace

Collections.sort(list, Comparator.comparingInt(Person::getAge));

运行结果正确 

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

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

相关文章

基于STM32的homeassistant(采用FreeRTOS操作系统)【第一、二章优化拓展:Wifi、服务器连接验证以及UASRT串口区分】

第一、二章优化拓展开发环境&#xff1a; 主控STM32F103C8T6WIFI模块ESP01S开发语言C开发编译器 KEIL 组网方式WIFI服务器协议MQTT 硬件连接 STM32ESP01S3.3V3.3V GND GND GPIO2 (USRAT2-TX) RXGPIO3 (USART3-RX)TX 本章要点&#xff1a; 对ESP01S的AT指令的反馈指令进…

【Go】实现一个代理Kerberos环境部分组件控制台的Web服务

实现一个代理Kerberos环境部分组件控制台的Web服务 背景安全措施引入的问题SSO单点登录 过程整体设计路由反向代理登录会话组件代理YarnHbase 结果 背景 首先要说明下我们目前有部分集群的环境使用的是HDP-3.1.5.0的大数据集群&#xff0c;除了集成了一些自定义的服务以外&…

vite 引入局部组件 必须带.vue

11:03:47 AM [vite] Internal server error: Failed to resolve import “./components/layoutsHeader” from “src/views/layouts/layouts.vue”. Does the file exist? 在这里插入图片描述

ADC 的初识

ADC介绍 Q: ADC是什么&#xff1f; A: 全称&#xff1a;Analog-to-Digital Converter&#xff0c;指模拟/数字转换器 ADC的性能指标 量程&#xff1a;能测量的电压范围分辨率&#xff1a;ADC能辨别的最小模拟量&#xff0c;通常以输出二进制数的位数表示&#xff0c;比如&am…

ENSP实验一:防火墙基础配置

1、搭建拓扑图 配置client&#xff08;内网&#xff09;、FTP Server&#xff08;外网&#xff09;的IP地址 客户端设置&#xff1a; 服务端设置&#xff1a; 2、配置防火墙命名 进入防火墙&#xff0c;输入密码&#xff1a;默认为admin123 <USG6000V1>system-view /…

计算机网络 day8 动态路由 - NAT - SNAT实验 - VMware的网卡的3种模式

目录 动态路由&#xff1a;IGP 和 EGP 参考网课&#xff1a;4.6.1 路由选择协议概述_哔哩哔哩_bilibili ​编辑 IGP&#xff08;Interior Gateway Protocol&#xff09;内部网关协议&#xff1a; EGP&#xff08;Interior Gateway Protocol&#xff09;外部网关协议&#x…

python标准库模块,json

展示了如何使用json模块进行编码和解码操作的常规示例&#xff1a; Python标准库模块——json&#xff08;编码解码json格式&#xff09; json模块简介 json模块是Python中的一个编码和解码JSON格式的轻量级模块&#xff0c;主要用于将Python对象编码为JSON格式输出或存储&a…

【论文阅读】聚集多个启发式信号作为监督用于无监督作文自动评分

摘要 本文提出一个新的无监督的AES方法ULRA&#xff0c;它不需要真实的作文分数标签进行训练&#xff1b;ULRA的核心思想是使用多个启发式的质量信号作为伪标准答案&#xff0c;然后通过学习这些质量信号的聚合来训练神经自动评分模型。为了将这些不一致的质量信号聚合为一个统…

CPU/内存相关术语

一、IO多路复用 IO多路复用是一种高效的I/O模型&#xff0c;可以监视多个文件描述符&#xff0c;当任何一个文件描述符就绪&#xff08;可读或可写&#xff09;时&#xff0c;就会通知程序进行读写操作。这种方式可以避免使用多线程或多进程的方式进行I/O操作&#xff0c;从而…

vue代码格式化,Prettier - Code formatter格式化规则文件

vue2&#xff0c;vue3格式化代码使用方法&#xff1a; 1、新建文件名&#xff1a; .prettierrc.cjs&#xff0c;里面放上下面的代码片段&#xff0c;直接粘贴即可 2、把 .prettierrc.cjs文件放在项目的根目录中 // prettier的默认配置文件 module.exports {// 一行最多 100 …

【Whisper】《OpenAI Whisper 精读【论文精读】》学习笔记

方法 Whisper在论文中表示使用单模型&#xff08;single model&#xff09;来完成多个语音任务&#xff08;multitask&#xff09;&#xff0c;李沐教授认为优点是设计上比较干净&#xff1b; I. 关于单模型效果的疑问 但是他同时也提出了两个疑问&#xff1a; 使用单模型会…

hudi系列-KeyGenerator 分区提取器

record key与hoodie key hudi支持数据更新,在upsert语义下,需要用记录级别的主键来表示每行数据的唯一性。主键是由record key和分区路径共同构成的 record key:记录键,分区下唯一,当为非分区表时等同于主键,虽然在源码中声明了a recordKey that acts as primary key fo…

矩阵AB和BA的特征值相同

手写的&#xff0c;如下图&#xff1a; 即可证明&#xff0c;矩阵AB的特征值和BA的特征值相同。 关于矩阵转置和逆矩阵混合运算&#xff0c;有如下规律&#xff1a;

unity01 界面布局

布局 坐标系 遵循左手定则&#xff0c;中指是y轴、食指是x轴、大拇指是z轴。 可以理解为x轴代表东西方向&#xff0c;z轴代表南北方向&#xff0c;y轴代表上下方向。 常用快捷键 鼠标中键&#xff1a;移动地图 右键&#xff1a;移动视角 shift鼠标左键单击gimo导航器的小方…

c++编写天天酷跑游戏

天天酷跑2.0版本&#xff1a;2.0 游戏背景设置 Start importing material (background picture) #include <graphics.h>Create a graph window and define macros for the window #define WIN_WINDTH 1012#define WIN_HEIGHT 396initgraph(WIN_WINDTH, WIN_HEIGHT);Imp…

Python 算法基础篇之 Python 语言回顾:变量、条件语句、循环语句、函数等

Python 算法基础篇之 Python 语言回顾&#xff1a;变量、条件语句、循环语句、函数等 引言 1. 变量2. 条件语句3. 循环语句 a ) for 循环 b ) while 循环 4. 函数总结 引言 Python 是一种流行的编程语言&#xff0c;具有简洁而易读的语法。在学习算法时&#xff0c;了解 Python…

B070-项目实战-用户模块--手机注册

目录 用户模块需求分析静态网站部署与调试两种前端项目的部署两种前端项目的调试(热部署)创建静态web项目 注册分析与设计分析需求设计 界面设计&#xff08;ui&#xff09;设计表&#xff08;后台&#xff09; 流程设计&#xff08;后台&#xff09;三范式表设计流程设计 相关…

Unity开发规范

代码 控制频繁调用GC 控制高频率的内存分配。控制大块的内存申请&#xff0c;可能会造成内存的碎片化&#xff0c;如果需要申请&#xff0c;尽可能在刚启动时申请。控制容易导致 GC alloc的函数调用[Mono]控制字符串拼接/ToString/ToArray[Mono]Boxing(拆装箱操作)/委托/匿名…

小白入门C#编写MVC登录小案例

一、C#编写MVC登录小案例 &#x1f680;1. 新建MVC项目。 &#x1f680;2. 在Models文件夹下创建一个User类&#xff0c;包含登录所需要的用户名和密码属性。 namespace MvcLogin.Models {public class User{public string UserName{get; set;}public string Password{get;se…

遥感目标检测(1)--R3Det

目录 一、概述 二、三个挑战 三、网络架构​ 1、旋转RetinaNet 2、精细化旋转RetinaNet 3、与RoIAlign&#xff08;感兴趣区域插值&#xff09;进行比较 4、消融实验与对比实验 一、概述 R3Det论文中提到一个端到端的精细化的单级旋转检测器&#xff0c;通过从粗到细的逐…