Java 中 List 集合排序方法
方式一: 调用List接口自己的sort方法排序
public static void main(String[] args) {List<Integer> numList=new ArrayList<>();numList.add(999);numList.add(123);numList.add(456);numList.add(66);numList.add(9);Collections.sort(numList); //使用Collections类的方法排序numList.sort(new Comparator<Integer>() {//使用List接口的方法排序@Overridepublic int compare(Integer o1, Integer o2) {return o1.compareTo(o2);}});//lambda表达式实现List接口sort方法排序numList.sort((num1,num2)->{return num1.compareTo(num2);});System.out.println(numList);}
方式二:使用java.util.Collections类的sort(List list)方法
public static void main(String[] args) {List<User> numList=new ArrayList<>();User u=new User();u.setAge(12);numList.add(u);User u1=new User();u1.setAge(34);numList.add(u1);User u2=new User();u2.setAge(6);numList.add(u2);User u3=new User();u3.setAge(99);numList.add(u3);//Collections类的sort方法对对象集合排序,要传集合和Comparator接口两个参数Collections.sort(numList, new Comparator<User>() {@Overridepublic int compare(User o1, User o2) {Integer age1= o1.getAge();Integer age2= o2.getAge();return age1.compareTo(age2);}});//List接口自身的sort方法对对象集合排序,重写Comparator接口方法即可numList.sort(new Comparator<User>() {@Overridepublic int compare(User u1, User u2) {Integer age1= u1.getAge();Integer age2= u2.getAge();return age1.compareTo(age2);}});//List接口的sort方法,lambda表达式写法numList.sort((u4,u5)->{Integer age1= u4.getAge();Integer age2= u5.getAge();return age1.compareTo(age2);});System.out.println(numList);
}
注:Collections的sort方法其实是调用了List接口自己的sort方法。
方式三:使用Stream流的sort方法
- 首先你需要list.parallelStream().sorted 进行流处理,使用parallelStream可以充分调度多核CPU。
- 使用Comparator.comparing进行排序,reversed()进行倒序排列,thenComparing进行下一个排序。
- Comparator.comparing()里面的内容,也是就是Object::getter,例如KeywordCounterDTO::getKeyword
- 最后格式化为需要的格式 List 是.collect(Collectors.toList()) , Map是.collect(Collectors.toMap(KeywordCounterDTO::getKey, KeywordCounterDTO::getValue))
1. 单字段排序
根据年龄倒序排public static void main(String[] args) {List<User> numList=new ArrayList<>();User u=new User();u.setAge(12);numList.add(u);User u1=new User();u1.setAge(34);numList.add(u1);User u2=new User();u2.setAge(6);numList.add(u2);User u3=new User();u3.setAge(99);numList.add(u3);numList = numList.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());
}
2. 多字段排序
先对学生的班级做排序,然后同班级做倒序
public static void main(String[] args) {List<User> numList=new ArrayList<>();User u=new User();u.setClass(1);u.setAge(12);numList.add(u);User u1=new User();u.setClass(1);u1.setAge(34);numList.add(u1);User u2=new User();u.setClass(2);u2.setAge(6);numList.add(u2);User u3=new User();u.setClass(2);u3.setAge(99);numList.add(u3);numList = numList.parallelStream().sorted(Comparator.comparing(User::getClass).reversed().thenComparing(User::getAge)).collect(Collectors.toList());
}
3. nullsFirst 排序
当集合中存在null元素时,可以使用针对null友好的比较器,null元素排在集合的最前面
public static void main(String[] args) {List<User> numList=new ArrayList<>();User u=new User();u.setClass(1);u.setAge(12);numList.add(u);User u1=new User();u.setClass(1);u1.setAge(34);numList.add(u1);User u2=new User();u.setClass(2);u2.setAge(6);numList.add(u2);User u3=new User();u.setClass(2);u3.setAge(99);numList.add(u3);numList = numList.parallelStream().sorted(Comparator.nullsFirst(User::getClass).reversed().thenComparing(User::getAge)).collect(Collectors.toList());
}
相关文章:
Java 中 List 集合排序方法
方式一: 调用List接口自己的sort方法排序 public static void main(String[] args) {List<Integer> numListnew ArrayList<>();numList.add(999);numList.add(123);numList.add(456);numList.add(66);numList.add(9);Collections.sort(numList); //使…...
prometheus监控k8s服务并告警到钉钉
一、监控k8s集群 要监控k8s集群需要使用到以下服务用于收集监控的资源信息,node_exporter用于监控k8s集群节点的资源信息,kube-state-metrics用于监控k8s集群的deployment、statefulset、daemonset、pod等的状态,cadvisor用于监控k8s集群的p…...
Go和Java实现解释器模式
Go和Java实现解释器模式 下面通过一个四则运算来说明解释器模式的使用。 1、解释器模式 解释器模式提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口 解释一个特定的上下文。这种模式被用在 SQL 解析、符…...
域名配置HTTPS
一、注册域名 这个可以在各大平台注册,具体看一下就会注册了,自己挑选一个自己喜欢的域名。 步骤一般也就是先实名,实名成功了才能注册域名。 二、办理SSL证书 这里使用的是阿里云的SSL免费证书 1、申请证书 二、填写申请 三、域名绑定生…...
机械设计cad,ug编程设计,ug模具设计,SolidWorks模具设计
模具设计培训课程: 【第一阶段:CAD识图制图】 [AutoCAD机械制图]:全面讲解AUTOCAD应用知识,常用命令讲解与运用,二维平面图绘制,三维成型零件的绘制与设计,制作工程图 【第二阶段:U…...
嵌入式开发的学习与未来展望:借助STM32 HAL库开创创新之路
引言: 嵌入式开发作为计算机科学领域的重要分支,为我们的日常生活和产业发展提供了无限的可能。STMicroelectronics的STM32系列芯片以其出色的性能和广泛的应用领域而备受关注。而STM32 HAL库作为嵌入式开发的高级库,为学习者提供了更高效、更…...
WPS-0DAY-20230809的分析和利用复现
WPS-0DAY-20230809的分析和初步复现 一、漏洞学习1、本地复现环境过程 2、代码解析1.htmlexp.py 3、通过修改shellcode拿shell曲折的学习msf生成sc 二、疑点1、问题2、我的测试测试方法测试结果 一、漏洞学习 强调:以下内容仅供学习和测试,一切行为均在…...
MongoDB(三十九)
目录 一、概述 (一)相关概念 (二)特性 二、应用场景 三、安装 (一)编译安装 (二)yum安装 1、首先制作repo源 2、软件包名:mongodb-org 3、启动服务:…...
InnoDB引擎
1 逻辑存储结构 InnoDB的逻辑存储结构如下图所示: 1). 表空间 表空间是InnoDB存储引擎逻辑结构的最高层, 如果用户启用了参数 innodb_file_per_table(在8.0版本中默认开启) ,则每张表都会有一个表空间(xxx.ibd),一个…...
CSS3中的var()函数
目录 定义: 语法: 用法: 定义: var()函数是一个 CSS 函数用于插入自定义属性(有时也被称为“CSS 变量”)的值 语法: var(custom-property-name, value) 函数的第一个参数是要替换的自定义属性…...
opencv图片换背景色
#include <iostream> #include<opencv2/opencv.hpp> //引入头文件using namespace cv; //命名空间 using namespace std;//opencv这个机器视觉库,它提供了很多功能,都是以函数的形式提供给我们 //我们只需要会调用函数即可in…...
JAVA语言:什么是懒加载机制?
JVM没有规定什么时候加载,一般是什么时候使用这个class才会什么时候加载,但是JVM规定了什么时候必须初始化(初始化是第三步、装载、连接、初始化),只要加载之后,那么肯定是要进行初始化的,所以我们就可以通过查看这个类有没有进行初始化,从而判断这个类有没有被加载。 …...
jupyter默认工作目录的更改
1、生成配置文件:打开Anaconda Prompt,输入如下命令 jupyter notebook --generate-config询问[y/N]时输入y 2、配置文件修改:根据打印路径打开配置文件jupyter_notebook_config.py,全文搜索找到notebook_dir所在位置。在单引号中…...
Flutter系列文章-Flutter UI进阶
在本篇文章中,我们将深入学习 Flutter UI 的进阶技巧,涵盖了布局原理、动画实现、自定义绘图和效果、以及 Material 和 Cupertino 组件库的使用。通过实例演示,你将更加了解如何创建复杂、令人印象深刻的用户界面。 第一部分:深入…...
Elasticsearch在部署时,对Linux的设置有哪些优化方法?
部署Elasticsearch时,可以通过优化Linux系统的设置来提升性能和稳定性。以下是一些常见的优化方法: 1.文件描述符限制 Elasticsearch需要大量的文件描述符来处理数据和连接,所以确保调整系统的文件描述符限制。可以通过修改 /etc/security/…...
【网络基础】应用层协议
【网络基础】应用层协议 文章目录 【网络基础】应用层协议1、协议作用1.1 应用层需求1.2 协议分类 2、HTTP & HTTPS2.1 HTTP/HTTPS 简介2.2 HTTP工作原理2.3 HTTPS工作原理2.4 区别 3、URL3.1 编码解码3.2 URI & URL 4、HTTP 消息结构4.1 HTTP请求方法4.2 HTTP请求头信…...
面试八股文Mysql:(1)事务实现的原理
1. 什么是事务 事务就是一组数据库操作,这些操作是一个atomic(原子性的操作) ,不可分割,要么都执行,要么回滚(rollback)都不执行。这样就避免了某个操作成功某个操作失败࿰…...
Linux学习之sed多行模式
N将下一行加入到模式空间 D删除模式空间中的第一个字符到第一个换行符 P打印模式空间中的第一个字符到第一个换行符 doubleSpace.txt里边的内容如下: goo d man使用下边的命令可以实现把上边对应的内容放到doubleSpace.txt。 echo goo >> doubleSpace.txt e…...
【刷题笔记8.15】【链表相关】LeetCode:合并两个有序链表、反转链表
LeetCode:【链表相关】合并两个有序链表 题目1:合并两个有序链表 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3…...
神经网络基础-神经网络补充概念-11-向量化逻辑回归
概念 通过使用 NumPy 数组来进行矩阵运算,将循环操作向量化。 向量化的好处在于它可以同时处理多个样本,从而加速计算过程。在实际应用中,尤其是处理大规模数据集时,向量化可以显著提高代码的效率。 代码实现-以逻辑回归为例 i…...
Cursor Free VIP终极指南:5步轻松实现AI编程助手永久免费使用
Cursor Free VIP终极指南:5步轻松实现AI编程助手永久免费使用 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached y…...
Apache Camel 企业级集成框架技术深度解析
Apache Camel 企业级集成框架技术深度解析 【免费下载链接】camelinaction2 :camel: This project hosts the source code for the examples of the Camel in Action 2nd ed book :closed_book: written by Claus Ibsen and Jonathan Anstey. 项目地址: https://gitcode.com/…...
量子优化新突破:虚时间演化高效求解QUBO问题
1. 量子优化新范式:模拟虚时间演化解决QUBO问题在金融投资组合优化、物流路径规划和机器学习特征选择等领域,二次无约束二进制优化(QUBO)问题无处不在。这类NP难问题随着规模扩大,求解难度呈指数级增长,传统…...
GradCAM原理与PyTorch实战:让CNN模型决策可解释
1. 项目概述:为什么我坚持把 GradCAM 当成模型诊断的听诊器用在实验室里调试一个图像分类模型时,我遇到过最尴尬的场景不是准确率上不去,而是模型“答对了题,但完全没看题”。有一次,我们训练了一个猫狗二分类模型&…...
【MLOps】模型部署与监控实战:从训练到生产的完整链路
一、MLOps概述与重要性 在机器学习项目中,模型训练仅仅是第一步。将训练好的模型部署到生产环境并持续监控其性能,是确保业务价值实现的关键环节。MLOps(Machine Learning Operations)正是解决这一问题的方法论和实践体系。 1.1 什…...
挖 SRC 必备 25 个漏洞平台 零基础入门到实战全汇总
【值得收藏】程序员必看:网络安全漏洞挖掘平台大全,附高额奖励攻略 本文详细介绍了30网络安全应急响应中心(SRC)平台,包括腾讯、360、华为、京东等企业官方漏洞平台,以及补天、Seebug等第三方平台。这些平台允许白帽黑客提交企业…...
Windows到Linux数据传输实战:WinSCP、SCP、Samba与rsync全解析
1. 项目概述:跨越操作系统的数据搬运在混合开发或运维环境中,从Windows向Linux服务器传输数据,是每个开发者、运维工程师甚至数据分析师都绕不开的日常操作。这看似简单的“复制粘贴”,背后却涉及网络协议、权限管理、文件系统差异…...
工业边缘计算实战:基于Wind River Helix与App Cloud的云原生应用部署与管理
1. 项目概述:当工业边缘计算遇上云原生应用最近在跟几个做工业物联网和智能网关项目的朋友聊天,发现一个挺有意思的现象:大家手里的硬件平台越来越强,但软件开发和部署的效率却成了新的瓶颈。一个典型的场景是,你有一台…...
NotebookLM时间线创建全流程拆解(从零到专业级时间叙事)
更多请点击: https://codechina.net 第一章:NotebookLM时间线创建全流程拆解(从零到专业级时间叙事) NotebookLM 的时间线(Timeline)功能并非内置独立模块,而是依托其“脚注驱动叙事”机制&am…...
深度学习的五大硬边界:数据饥渴、因果失语、鲁棒性脆性、可解释性黑洞与泛化围栏
1. 这不是“AI不行了”,而是你该看清深度学习真正能做什么、不能做什么“Limitations of Deep Learning”这个标题,乍一看像篇学术综述的冷门小节,但在我过去十年带团队落地近百个AI项目的过程中,它其实是每个工程师、产品经理甚至…...
