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

【JAVA】Hutool CollUtil.sort 方法:多场景下的排序解决方案

在 Java 开发中,集合的排序是常见需求。Hutool 库的 CollUtil.sort 方法提供了一系列用于排序的实用功能,适用于不同的场景。以下是对几种常见场景及其实现方式的总结:

<dependency><groupId>org.dromara.hutool</groupId><artifactId>hutool-all</artifactId><version>6.0.0-M14</version>
</dependency>

1. 默认升序排序

对于简单的升序排序,可以直接使用 CompareUtil.natural 获取自然顺序比较器,并结合 CollUtil.sort 方法实现:

List < String > list = ListUtil.of("banana", "apple", "orange");
List < String > sortedList = CollUtil.sort(list, CompareUtil.natural());

2. 默认降序排序

如果需要进行降序排序,可以结合 CompareUtil.naturalReverse 获取逆序比较器,并使用 CollUtil.sort 方法进行排序:

List < String > list = ListUtil.of("banana", "apple", "orange");
List < String > sortedList = CollUtil.sort(list, CompareUtil.naturalReverse());

3. 字符串长度排序逻辑

当需要基于自定义逻辑进行排序时,可以使用 Hutool 提供的 StrLengthComparator 等已定义的比较器,或者通过以下方式自定义比较器:

List < String > list = ListUtil.of("banana", "apple", "orange");
// 短在前
List < String > sortedList = CollUtil.sort(list, StrLengthComparator.INSTANCE);
// 短在后
List < String > sortedList2 = CollUtil.sort(list, StrLengthComparator.INSTANCE.reversed());

4. 带有null值排序

当集合中包含 null 值时,可以使用 Comparator.nullsLastComparator.nullsFirst 方法将 null 值排序到列表的一端:

List < String > list = ListUtil.of(null, "banana", "apple", "orange");
List < String > sortedList = CollUtil.sort(list, Comparator.nullsLast(Comparator.naturalOrder()));
System.out.println(sortedList);

或者

List < String > list = ListUtil.of("banana", "apple", "orange", null);
List < String > sortedList = CollUtil.sort(list, Comparator.nullsFirst(Comparator.naturalOrder()));
System.out.println(sortedList);

5. 对象字段排序

对于对象集合的排序,可以使用 FieldsComparator 或其他比较器对多个字段进行排序:

List < Person > people = ListUtil.of(new Person("Alice", null),new Person("Bob", 28),new Person("Charlie", 25));
List < Person > sorted = CollUtil.sort(people, new FieldComparator<>(Person.class, "age"));
System.out.println(sorted);

或者CompareUtil实现排序逻辑:

List < Person > people = ListUtil.of(new Person("Alice", null), new Person("Bob", 25),new Person("Charlie", 25));
// 自然比较两个对象的大小,isNullGreater – null值是否做为最大值
List < Person > sort = CollUtil.sort(people,(compareOne, compareTow) -> CompareUtil.compare(compareOne.getAge(), compareTow.getAge(), true));
System.out.println(sort);

年龄相同按照姓名排序

List < Person > people = ListUtil.of(new Person("Alice", null),new Person("Bob", 25),new Person("Charlie", 25));
List < Person > sorted2 = CollUtil.sort(people, new FieldsComparator<>(Person.class, "age", "name"));
System.out.println(sorted2);

总结:
Hutool 的 CollUtil.sort 方法为 Java 开发者提供了一系列强大的排序功能,能够满足各种场景下的排序需求。通过合理选择和使用这些功能,可以显著提高代码的可读性和可维护性。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MYSQL 第四次作业
  • 函数调用时参数是如何从右至左入栈的
  • MySQL-视图、存储过程和触发器
  • HTML常用的转义字符——怎么在网页中写“<div></div>”?
  • ArcGIS Pro SDK (九)几何 15 转换
  • 6.3 面向对象技术-设计模式
  • C++ - 基于多设计模式下的同步异步⽇志系统
  • 如何系统的学习C++和自动驾驶算法
  • SAP PP学习笔记31 - 计划运行的步骤2 - Scheduling(日程计算),BOM Explosion(BOM展开)
  • 把redis用在Java项目
  • python_基础编程_字典、集合
  • C语言图书信息管理系统
  • 导航网站WP主题/WP黑格导航主题BlackCandy-简约酷黑色高逼格+焕然一新的UI设计
  • 多区域DNS以及主从DNS的搭建
  • 【Gin】架构的精妙编织:Gin框架中组合模式的革新实践与技术深度解析(下)
  • $translatePartialLoader加载失败及解决方式
  • 2017年终总结、随想
  • es6要点
  • jquery ajax学习笔记
  • JS数组方法汇总
  • 深度学习在携程攻略社区的应用
  • 微服务入门【系列视频课程】
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 小程序开发之路(一)
  • 一份游戏开发学习路线
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • - 转 Ext2.0 form使用实例
  • Python 之网络式编程
  • ​学习一下,什么是预包装食品?​
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #Spring-boot高级
  • (02)Unity使用在线AI大模型(调用Python)
  • (10)STL算法之搜索(二) 二分查找
  • (19)夹钳(用于送货)
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (6)添加vue-cookie
  • (java)关于Thread的挂起和恢复
  • (备份) esp32 GPIO
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (利用IDEA+Maven)定制属于自己的jar包
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET DataGridView数据绑定说明
  • .NET 反射 Reflect
  • .NET 漏洞分析 | 某ERP系统存在SQL注入
  • .net 受管制代码
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • @Async 异步注解使用
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • [ACM独立出版] 2024年虚拟现实、图像和信号处理国际学术会议(VRISP 2024,8月2日-4)
  • [Angular] 笔记 6:ngStyle