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…...
阿里云 ECS 部署 SpringBoot 项目完整教程(无坑可直接照着做)
需要购买阿里云服务器、学习服务器搭建的朋友看这里 👇阿里云超值折扣购买通道 :https://t.aliyun.com/U/L7DIVq 超详细服务器搭建教程:手把手教你阿里云服务器的购买及环境搭建 无论是新手入门、个人建站还是企业部署,都能一站…...
I.MX6U-MINI开发板系统固化全流程:从uboot编译到rootfs烧录(附网络配置技巧)
I.MX6U-MINI开发板系统固化实战指南:从零构建到网络调优 第一次拿到I.MX6U-MINI开发板时,面对系统固化的多个环节总有种无从下手的感觉。作为嵌入式Linux开发的入门门槛,系统固化不仅关系到后续应用开发的基础环境,更是理解嵌入式…...
3步掌握百度网盘效率工具:全平台秒传链接解决方案
3步掌握百度网盘效率工具:全平台秒传链接解决方案 【免费下载链接】baidupan-rapidupload 百度网盘秒传链接转存/生成/转换 网页工具 (全平台可用) 项目地址: https://gitcode.com/gh_mirrors/bai/baidupan-rapidupload 在数字化协作时代,文件传输…...
MStar-Bin-Tool-Master中文版|晨星芯片BIN固件解包/封包工具(适配机顶盒与智能电视)
温馨提示:文末有联系方式工具简介 MStar-Bin-Tool-Master中文增强版是一款专为晨星(MStar)系列主控芯片设计的固件解析与重构工具,全面支持主流机顶盒与智能液晶电视所用BIN格式刷机包,提供直观易用的图形化操作界面&a…...
在线PPT工具哪个最方便快捷?6款主流工具实测,新手也能快速出片
作为AI博主,日常要产出AI工具实测、智能创作干货、高效办公教程,对在线PPT工具的核心需求远超基础编辑——全端适配、AI生成专业、安全合规、资源充足,无需复杂操作,既能依托AI快速生成高质量内容,又能兼顾多场景使用与…...
Atmosphere:重新定义Nintendo Switch自制固件的革命性框架
Atmosphere:重新定义Nintendo Switch自制固件的革命性框架 【免费下载链接】Atmosphere Atmosphre is a work-in-progress customized firmware for the Nintendo Switch. 项目地址: https://gitcode.com/GitHub_Trending/at/Atmosphere 你是否曾想过&#x…...
小红书自动评论的‘伪需求’与真风险:聊聊RPA工具养号背后的封号逻辑与合规玩法
小红书自动化评论的合规边界:效率与账号安全的博弈术 凌晨三点,某MCN机构运营负责人李然被连续不断的手机提示音惊醒——团队管理的12个小红书达人账号同时收到平台封禁通知,而这一切都源于他们三天前部署的那套"高效互动系统"。这…...
JS 缓存函数(缓存函数计算结果、缓存异步函数的执行结果以及带过期时间)
JS 缓存函数 一、普通函数结果缓存(同步缓存) 实现一个通用缓存高阶函数,核心逻辑:第一次执行计算并缓存结果,后续相同参数直接读取缓存,不再重复执行。 实现代码 // 缓存高阶函数:接收一个函数…...
告别虚拟机!在Windows上用WSL2和NDK r27c交叉编译Android动态库(附CMake集成避坑指南)
在Windows上利用WSL2与NDK r27c高效构建Android动态库的完整指南 对于Android开发者而言,跨平台编译一直是个令人头疼的问题。传统虚拟机方案虽然功能完整,但资源占用高、启动慢,而纯Windows环境下的NDK工具链又常常遇到各种兼容性问题。本文…...
别再只会让舵机转圈了!用Arduino和SG90实现精准角度控制的保姆级教程
从转圈到精准控制:Arduino与SG90舵机的高级应用指南 第一次接触舵机时,我们往往满足于让它简单地来回转动——这确实很有趣,就像给玩具注入了生命。但当你真正想用它构建一个机械臂、智能云台或是自动喂食器时,这种粗放的控制方式…...
