news 2026/4/22 23:40:20

Hutool EnumUtil 教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Hutool EnumUtil 教程

Hutool 的EnumUtil是一个枚举工具类,提供了多种便捷操作枚举的方法,包括获取枚举名称列表、获取枚举值列表、根据名称获取枚举对象等。

Maven 依赖

<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.26</version> </dependency>

示例枚举类

public enum Status { SUCCESS(200, "成功"), FAIL(500, "失败"), PROCESSING(100, "处理中"); private int code; private String msg; Status(int code, String msg) { this.code = code; this.msg = msg; } public int getCode() { return code; } public String getMsg() { return msg; } }

常用方法

1. 获取枚举名称列表

// 获取所有枚举名称 List<String> names = EnumUtil.getNames(Status.class); // 结果: ["SUCCESS", "FAIL", "PROCESSING"]

2. 获取枚举值列表

// 获取所有枚举值 List<Object> values = EnumUtil.getFieldValues(Status.class, "code"); // 结果: [200, 500, 100] List<Object> msgs = EnumUtil.getFieldValues(Status.class, "msg"); // 结果: ["成功", "失败", "处理中"]

3. 根据名称获取枚举

// 不区分大小写 Status status = EnumUtil.fromString(Status.class, "success", true); // 结果: Status.SUCCESS // 区分大小写(默认) Status status2 = EnumUtil.fromString(Status.class, "SUCCESS"); // 结果: Status.SUCCESS

4. 根据字段值获取枚举

// 根据 code 字段值获取枚举 Status status = EnumUtil.getBy(Status::getCode, 200, Status.class); // 结果: Status.SUCCESS

5. 判断枚举是否包含某个名称

boolean contains = EnumUtil.contains(Status.class, "SUCCESS"); // 结果: true boolean containsIgnoreCase = EnumUtil.containsIgnoreCase(Status.class, "success"); // 结果: true

6. 获取枚举类信息

// 判断是否为枚举类 boolean isEnum = EnumUtil.isEnum(Status.class); // 结果: true // 获取枚举项数量 int size = EnumUtil.size(Status.class); // 结果: 3 // 判断是否为空枚举 boolean isEmpty = EnumUtil.isEmpty(Status.class); // 结果: false // 判断是否为非空枚举 boolean isNotEmpty = EnumUtil.isNotEmpty(Status.class); // 结果: true

7. 获取枚举映射

// 枚举 -> 名称映射 Map<String, Status> enumMap = EnumUtil.getEnumMap(Status.class); // 结果: {"SUCCESS": Status.SUCCESS, "FAIL": Status.FAIL, "PROCESSING": Status.PROCESSING} // 名称 -> 枚举映射(与上面相同,键为名称) Map<String, Status> nameEnumMap = EnumUtil.getNameEnumMap(Status.class);

8. 获取枚举值列表(泛型版本)

// 直接返回泛型枚举列表 List<Status> enumList = EnumUtil.toList(Status.class); // 结果: [Status.SUCCESS, Status.FAIL, Status.PROCESSING]

9. 根据谓词获取枚举

// 获取第一个满足条件的枚举 Status status = EnumUtil.getFirstBy(Status.class, e -> e.getCode() > 100); // 结果: Status.SUCCESS (code=200)

10. 枚举名称转换

// 将枚举名称转换为驼峰形式 String camel = EnumUtil.toCamelCase(Status.SUCCESS.name()); // 结果: "success"

完整示例

import cn.hutool.core.util.EnumUtil; import java.util.List; public class EnumUtilDemo { public static void main(String[] args) { // 1. 获取所有枚举名称 List<String> names = EnumUtil.getNames(Status.class); System.out.println("枚举名称: " + names); // 2. 获取所有 code 值 List<Object> codes = EnumUtil.getFieldValues(Status.class, "code"); System.out.println("Code值: " + codes); // 3. 根据名称获取枚举 Status success = EnumUtil.fromString(Status.class, "SUCCESS"); System.out.println("获取枚举: " + success); // 4. 根据字段值获取枚举 Status fail = EnumUtil.getBy(Status::getCode, 500, Status.class); System.out.println("根据code获取: " + fail); // 5. 枚举映射 var enumMap = EnumUtil.getNameEnumMap(Status.class); System.out.println("枚举映射: " + enumMap); // 6. 判断包含 System.out.println("包含SUCCESS? " + EnumUtil.contains(Status.class, "SUCCESS")); } }

注意事项

  1. 字段访问getFieldValues()方法需要字段有对应的 getter 方法或字段本身可访问

  2. 性能考虑:频繁调用时建议缓存结果,如枚举映射

  3. 命名匹配fromString()默认区分大小写,可使用重载方法忽略大小写

  4. 空值处理:大多数方法在参数为 null 时会返回空集合或 false,不会抛出 NPE

总结

EnumUtil简化了枚举的常见操作,避免手写重复的遍历代码。对于复杂的枚举操作(如根据多个条件查找),可以结合 Lambda 表达式使用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 23:39:55

二叉树的层序遍历(c++)

102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 例如&#xff1a; 1.因为题目返回值是一个二维的vector&#xff0c;即我们知道了要有一个vector<vector<int>> vv 用来存放我们的答案&#xff1b; 2.说到层序&#xff0c;就…

作者头像 李华
网站建设 2026/4/22 23:38:42

最大的团队表现值(python)

思路&#xff1a;使用贪心思想最小堆。先以效率为基准降序排序&#xff0c;那么当前遍历到的效率就是可见的最小效率&#xff0c;用这个最小效率与小顶堆的速度之和相乘&#xff0c;再取max(当前最大价值&#xff0c;全局最大价值)。# 6 # 2 10 3 1 5 8 # 5 4 3 9 7 2 # 2 # 输…

作者头像 李华
网站建设 2026/4/22 23:37:27

Python与OpenAI API实战:快速构建AI对话服务

1. Python与OpenAI API入门&#xff1a;从零构建你的第一个AI对话项目作为一名长期从事AI应用开发的工程师&#xff0c;我经常被问到如何快速上手OpenAI的API服务。今天我就带大家完整走一遍流程&#xff0c;从API密钥获取到最终部署一个可交互的对话服务。这个项目特别适合想要…

作者头像 李华
网站建设 2026/4/22 23:36:23

Linux 用户 / 用户组 核心命令全详解

第一部分&#xff1a;用户组管理命令&#xff08;2 个&#xff09;1. groupadd - 创建新用户组作用&#xff1a;新建一个用户组&#xff08;用于批量管理用户权限&#xff09;标准语法groupadd [选项] 组名核心必记选项选项作用-g GID手动指定组 ID&#xff08;不写则系统自动分…

作者头像 李华
网站建设 2026/4/22 23:36:11

2025最权威的十大AI论文方案推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要是针对维普检测系统的 AI 降重需求&#xff0c;那就得从文本特征调整这方面着手。首先呢&a…

作者头像 李华