当前位置: 首页 > news >正文

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方法

  1. 首先你需要list.parallelStream().sorted 进行流处理,使用parallelStream可以充分调度多核CPU。
  2. 使用Comparator.comparing进行排序,reversed()进行倒序排列,thenComparing进行下一个排序。
  3. Comparator.comparing()里面的内容,也是就是Object::getter,例如KeywordCounterDTO::getKeyword
  4. 最后格式化为需要的格式 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 集合排序方法

方式一&#xff1a; 调用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集群需要使用到以下服务用于收集监控的资源信息&#xff0c;node_exporter用于监控k8s集群节点的资源信息&#xff0c;kube-state-metrics用于监控k8s集群的deployment、statefulset、daemonset、pod等的状态&#xff0c;cadvisor用于监控k8s集群的p…...

Go和Java实现解释器模式

Go和Java实现解释器模式 下面通过一个四则运算来说明解释器模式的使用。 1、解释器模式 解释器模式提供了评估语言的语法或表达式的方式&#xff0c;它属于行为型模式。这种模式实现了一个表达式接口&#xff0c;该接口 解释一个特定的上下文。这种模式被用在 SQL 解析、符…...

域名配置HTTPS

一、注册域名 这个可以在各大平台注册&#xff0c;具体看一下就会注册了&#xff0c;自己挑选一个自己喜欢的域名。 步骤一般也就是先实名&#xff0c;实名成功了才能注册域名。 二、办理SSL证书 这里使用的是阿里云的SSL免费证书 1、申请证书 二、填写申请 三、域名绑定生…...

机械设计cad,ug编程设计,ug模具设计,SolidWorks模具设计

模具设计培训课程&#xff1a; 【第一阶段&#xff1a;CAD识图制图】 [AutoCAD机械制图]&#xff1a;全面讲解AUTOCAD应用知识&#xff0c;常用命令讲解与运用&#xff0c;二维平面图绘制&#xff0c;三维成型零件的绘制与设计&#xff0c;制作工程图 【第二阶段&#xff1a;U…...

嵌入式开发的学习与未来展望:借助STM32 HAL库开创创新之路

引言&#xff1a; 嵌入式开发作为计算机科学领域的重要分支&#xff0c;为我们的日常生活和产业发展提供了无限的可能。STMicroelectronics的STM32系列芯片以其出色的性能和广泛的应用领域而备受关注。而STM32 HAL库作为嵌入式开发的高级库&#xff0c;为学习者提供了更高效、更…...

WPS-0DAY-20230809的分析和利用复现

WPS-0DAY-20230809的分析和初步复现 一、漏洞学习1、本地复现环境过程 2、代码解析1.htmlexp.py 3、通过修改shellcode拿shell曲折的学习msf生成sc 二、疑点1、问题2、我的测试测试方法测试结果 一、漏洞学习 强调&#xff1a;以下内容仅供学习和测试&#xff0c;一切行为均在…...

MongoDB(三十九)

目录 一、概述 &#xff08;一&#xff09;相关概念 &#xff08;二&#xff09;特性 二、应用场景 三、安装 &#xff08;一&#xff09;编译安装 &#xff08;二&#xff09;yum安装 1、首先制作repo源 2、软件包名&#xff1a;mongodb-org 3、启动服务&#xff1a…...

InnoDB引擎

1 逻辑存储结构 InnoDB的逻辑存储结构如下图所示: 1). 表空间 表空间是InnoDB存储引擎逻辑结构的最高层&#xff0c; 如果用户启用了参数 innodb_file_per_table(在8.0版本中默认开启) &#xff0c;则每张表都会有一个表空间&#xff08;xxx.ibd&#xff09;&#xff0c;一个…...

CSS3中的var()函数

目录 定义&#xff1a; 语法&#xff1a; 用法&#xff1a; 定义&#xff1a; var()函数是一个 CSS 函数用于插入自定义属性&#xff08;有时也被称为“CSS 变量”&#xff09;的值 语法&#xff1a; var(custom-property-name, value) 函数的第一个参数是要替换的自定义属性…...

opencv图片换背景色

#include <iostream> #include<opencv2/opencv.hpp> //引入头文件using namespace cv; //命名空间 using namespace std;//opencv这个机器视觉库&#xff0c;它提供了很多功能&#xff0c;都是以函数的形式提供给我们 //我们只需要会调用函数即可in…...

JAVA语言:什么是懒加载机制?

JVM没有规定什么时候加载,一般是什么时候使用这个class才会什么时候加载,但是JVM规定了什么时候必须初始化(初始化是第三步、装载、连接、初始化),只要加载之后,那么肯定是要进行初始化的,所以我们就可以通过查看这个类有没有进行初始化,从而判断这个类有没有被加载。 …...

jupyter默认工作目录的更改

1、生成配置文件&#xff1a;打开Anaconda Prompt&#xff0c;输入如下命令 jupyter notebook --generate-config询问[y/N]时输入y 2、配置文件修改&#xff1a;根据打印路径打开配置文件jupyter_notebook_config.py&#xff0c;全文搜索找到notebook_dir所在位置。在单引号中…...

Flutter系列文章-Flutter UI进阶

在本篇文章中&#xff0c;我们将深入学习 Flutter UI 的进阶技巧&#xff0c;涵盖了布局原理、动画实现、自定义绘图和效果、以及 Material 和 Cupertino 组件库的使用。通过实例演示&#xff0c;你将更加了解如何创建复杂、令人印象深刻的用户界面。 第一部分&#xff1a;深入…...

Elasticsearch在部署时,对Linux的设置有哪些优化方法?

部署Elasticsearch时&#xff0c;可以通过优化Linux系统的设置来提升性能和稳定性。以下是一些常见的优化方法&#xff1a; 1.文件描述符限制 Elasticsearch需要大量的文件描述符来处理数据和连接&#xff0c;所以确保调整系统的文件描述符限制。可以通过修改 /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. 什么是事务 事务就是一组数据库操作&#xff0c;这些操作是一个atomic&#xff08;原子性的操作&#xff09; &#xff0c;不可分割&#xff0c;要么都执行&#xff0c;要么回滚&#xff08;rollback&#xff09;都不执行。这样就避免了某个操作成功某个操作失败&#xff0…...

Linux学习之sed多行模式

N将下一行加入到模式空间 D删除模式空间中的第一个字符到第一个换行符 P打印模式空间中的第一个字符到第一个换行符 doubleSpace.txt里边的内容如下&#xff1a; goo d man使用下边的命令可以实现把上边对应的内容放到doubleSpace.txt。 echo goo >> doubleSpace.txt e…...

【刷题笔记8.15】【链表相关】LeetCode:合并两个有序链表、反转链表

LeetCode&#xff1a;【链表相关】合并两个有序链表 题目1&#xff1a;合并两个有序链表 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3…...

神经网络基础-神经网络补充概念-11-向量化逻辑回归

概念 通过使用 NumPy 数组来进行矩阵运算&#xff0c;将循环操作向量化。 向量化的好处在于它可以同时处理多个样本&#xff0c;从而加速计算过程。在实际应用中&#xff0c;尤其是处理大规模数据集时&#xff0c;向量化可以显著提高代码的效率。 代码实现-以逻辑回归为例 i…...

DS1881对数型数字电位器I²C驱动详解

1. DS1881 数字电位器驱动深度解析&#xff1a;面向嵌入式系统的IC对数型精密控制方案1.1 器件本质与工程定位DS1881 是 Dallas Semiconductor&#xff08;后被 Maxim Integrated 收购&#xff09;推出的单通道 IC 接口对数型数字电位器&#xff0c;其核心价值不在于“可编程电…...

无代码自动化:OpenClaw+Qwen3.5-9B可视化流程搭建

无代码自动化&#xff1a;OpenClawQwen3.5-9B可视化流程搭建 1. 为什么选择OpenClawQwen3.5-9B组合 去年夏天&#xff0c;我发现自己每周要花3小时重复做三件事&#xff1a;整理会议录音、提取待办事项、设置日历提醒。当我尝试用传统自动化工具时&#xff0c;要么需要写代码…...

Qwen2.5-0.5B手机AI入门:从下载到对话,30分钟全搞定

Qwen2.5-0.5B手机AI入门&#xff1a;从下载到对话&#xff0c;30分钟全搞定 1. 为什么选择Qwen2.5-0.5B-Instruct&#xff1f; 在移动设备上运行AI大模型听起来像是科幻场景&#xff0c;但Qwen2.5-0.5B-Instruct让它变成了现实。这个由阿里通义实验室开源的轻量级语言模型&am…...

Windows平台用CMake+VS2019编译NLopt的完整流程(附环境变量配置)

Windows平台用CMakeVS2019编译NLopt的完整流程&#xff08;附环境变量配置&#xff09; 在科学计算和优化算法开发领域&#xff0c;NLopt作为一个功能强大的开源库&#xff0c;提供了多种非线性优化算法的实现。对于Windows平台的C开发者而言&#xff0c;掌握从源码构建NLopt的…...

Kandinsky-5.0-I2V-Lite-5s实战:基于Dify平台构建无代码视频生成应用

Kandinsky-5.0-I2V-Lite-5s实战&#xff1a;基于Dify平台构建无代码视频生成应用 1. 引言&#xff1a;让图片动起来的零门槛方案 最近遇到不少朋友在问&#xff1a;有没有什么简单的方法&#xff0c;能让静态图片变成动态视频&#xff1f;传统方案要么需要专业视频编辑技能&a…...

通过配置驱动前端页面的实现方法

通过配置驱动前端页面的实现方法 配置驱动开发&#xff08;Configuration-Driven Development, CDD&#xff09;是一种通过外部配置而非硬编码来控制应用行为的开发模式。在前端领域&#xff0c;这种模式可以显著提升页面灵活性和可维护性。以下是具体实现方案&#xff1a; 理解…...

Qwen3.5-9B-AWQ-4bit部署指南:双卡RTX 4090-D镜像免配置快速上手

Qwen3.5-9B-AWQ-4bit部署指南&#xff1a;双卡RTX 4090-D镜像免配置快速上手 1. 模型概述 千问3.5-9B-AWQ-4bit是一个支持图像理解的多模态模型&#xff0c;能够结合上传图片与文字提示词&#xff0c;输出中文分析结果。这个量化版本特别适合处理以下任务&#xff1a; 图片主…...

牙科手术显微镜市场:其中中国市场占比超15%

在口腔诊疗向精细化、微创化演进的进程中&#xff0c;牙科手术显微镜作为核心光学放大设备&#xff0c;凭借其高照度、高景深与高清晰度特性&#xff0c;成为提升根管治疗、牙周手术及种植修复等环节精准性的关键工具。该设备集成连续变倍观察、同轴照明、术野调焦及影像记录系…...

快马平台十分钟速建:openclaw机器人抓取参数可视化配置原型

最近在做一个机器人抓取控制的项目&#xff0c;需要快速搭建一个openclaw的参数配置界面。作为一个前端开发经验不多的工程师&#xff0c;我惊喜地发现InsCode(快马)平台可以帮我快速实现这个需求。下面分享下我的实现过程。 首先明确需求 这个配置工具需要实现五个核心功能&a…...

4款降AI率工具实测横评:最便宜和最贵的效果差多少?

花了几百块&#xff0c;测了一圈&#xff0c;现在把结果告诉你。 降AI率工具、降AI工具保姆级测评2026、降AI这个需求&#xff0c;不同工具之间差距其实挺明显的&#xff0c;不是"随便用一个都一样"。 我的结论&#xff1a;嘎嘎降AI&#xff08;www.aigcleaner.com…...