1、定义一个EnumItem接口,供每个枚举类实现

public interface EnumItem<V> extends Serializable {//泛型V getCode();String getValue();String getName();}

2、枚举类SexEnum实现EnumItem接口,并重写方法

public enum SexEnum implements EnumItem<String> {//实现EnumItem接口,并指定该枚举code的数据类型MALE("0", "男"),FEMALE("1", "女"),;private final String code;private final String value;SexEnum(String code, String value) {this.code = code;this.value = value;}@Overridepublic String getCode() {return code;}@Overridepublic String getValue() {return value;}@Overridepublic String getName() {return name();}
}

3、定义枚举工具类EnumUtil

import java.util.*;
import java.util.stream.Collectors;public class EnumUtil {/*** 获取所有枚举项** @param enumType 枚举类型* @param <T>      EnumItem* @return 枚举项列表*/public static <T extends EnumItem<?>> List<T> getEnumItems(Class<T> enumType) {return Arrays.asList(enumType.getEnumConstants());}/*** 获取key为code的map** @param enumType 枚举类型* @param <V>      code泛型* @param <T>      EnumItem* @return*/public static <V, T extends EnumItem<V>> Map<V, String> getEnumMapCode(Class<T> enumType) {Map<V, String> map = new HashMap<>();for (T enumItem : enumType.getEnumConstants()) {map.put(enumItem.getCode(), enumItem.getValue());}return map;}/*** 获取key为value的map** @param enumType 枚举类型* @param <V>      code泛型* @param <T>      EnumItem* @return*/public static <V, T extends EnumItem<V>> Map<String, V> getEnumMapValue(Class<T> enumType) {Map<String, V> map = new HashMap<>();for (T enumItem : enumType.getEnumConstants()) {map.put(enumItem.getValue(), enumItem.getCode());}return map;}/*** 获取枚举所有项的列表** @param enumType 枚举类型* @param <T>      EnumItem* @return*/public static <T extends EnumItem<?>> List<Map<String, Object>> getEnumList(Class<T> enumType) {List<Map<String, Object>> list = new ArrayList<>();if (!enumType.isEnum()) {return new ArrayList<>();}T[] enums = enumType.getEnumConstants();if (enums == null || enums.length <= 0) {return new ArrayList<>();}for (T enumItem : enums) {Map<String, Object> map = new HashMap<>();map.put("code", enumItem.getCode());map.put("value", enumItem.getValue());map.put("name", enumItem.getName());list.add(map);}return list;}/*** 获取枚举的所有Code值** @param enumType 枚举类型* @param <T>      EnumItem* @param <V>      code泛型* @return 枚举code值列表*/public static <V, T extends EnumItem<V>> List<V> getEnumCodes(Class<T> enumType) {return Arrays.stream(enumType.getEnumConstants()).map(EnumItem::getCode).collect(Collectors.toList());}/*** 获取枚举的所有Value值** @param enumType 枚举类型* @param <T>      EnumItem* @return 枚举value值列表*/public static <T extends EnumItem<?>> List<String> getEnumValues(Class<T> enumType) {return Arrays.stream(enumType.getEnumConstants()).map(EnumItem::getValue).collect(Collectors.toList());}/*** 根据Code值查询对应的枚举项** @param enumType 枚举类型* @param code     枚举code* @param <T>      EnumItem* @param <V>      code泛型* @return 枚举项*/public static <V, T extends EnumItem<V>> T fromCode(Class<T> enumType, V code) {if (code == null) {return null;}for (T enumItem : enumType.getEnumConstants()) {if (Objects.equals(code, enumItem.getCode())) {return enumItem;}}return null;}/*** 根据value获取对应的枚举项** @param enumType* @param value* @param <T>* @return*/public static <T extends EnumItem<?>> T fromValue(Class<T> enumType, String value) {if (value == null) {return null;}for (T enumItem : enumType.getEnumConstants()) {if (Objects.equals(value, enumItem.getValue())) {return enumItem;}}return null;}}

4、测试调用

public class Test01 {public static void main(String[] args) {List<SexEnum> items = EnumUtil.getEnumItems(SexEnum.class);System.out.println(items.toString());System.out.println(EnumUtil.getEnumCodes(SexEnum.class));System.out.println(EnumUtil.getEnumValues(SexEnum.class));System.out.println(EnumUtil.fromCode(SexEnum.class,"0"));System.out.println(EnumUtil.fromValue(SexEnum.class,"男"));System.out.println(EnumUtil.getEnumMapCode(SexEnum.class));System.out.println(EnumUtil.getEnumMapValue(SexEnum.class));System.out.println(EnumUtil.getEnumList(SexEnum.class));}/*[MALE, FEMALE][0, 1][男, 女]MALEMALE{0=男, 1=女}{女=1, 男=0}[{code=0, name=MALE, value=男}, {code=1, name=FEMALE, value=女}]*/
}

Java 枚举工具类相关推荐

  1. java枚举工具类_Java 枚举

    引入编写季节类(Season),该类只有四个对象(spring,summer,autumn,winter) 概念枚举(enum)全称为 enumeration, 是 JDK 1.5 中引入的新特性. ...

  2. java枚举返回字符串_枚举工具类-通过给定值获取对应的枚举类

    开发背景: 在开发过程中遇到需要通过给定的值来获取对应的枚举值,如下例枚举类中,需要通过传入"春"来获取SPRING. public 开始尝试通过Enum的内置方法valueOf( ...

  3. Hutool Java常用工具类汇总

    简介 Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以"甜甜的". Hu ...

  4. UrlUtils工具类,Java URL工具类,Java URL链接工具类

    UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...

  5. Java并发工具类(闭锁CountDownLatch)

    并发工具类系列: Java并发工具类(闭锁CountDownLatch) Java并发工具类(栅栏CyclicBarrier) Java并发工具类(信号量Semaphore) 闭锁是一种同步工具类,可 ...

  6. java日期工具类DateUtil

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. DateUtil类 [java] view plain copy package com.util; ...

  7. Java常用工具类StringUtils的常用方法

    Java常用工具类StringUtils的常用方法 1.该工具类是用于操作Java.lang.String类的. 2.StringUtils类在操作字符串是安全的,不会报空指针异常,也正因此,在操作字 ...

  8. 组织机构代码和统一社会信用代码校验规则以及java校验工具类

    组织机构代码 编码规则编辑 1.全国组织机构代码由八位数字(或大写拉丁字母)本体代码和一位数字(或大写拉丁字母)校验码组成. 本体代码采用系列(即分区段)顺序编码方法. 校验码按照以下公式计算: C9 ...

  9. 彻底理解Java并发:Java并发工具类

    本篇内容包括:Java 并发工具类的介绍.使用方式与 Demo,包括了 CountDownLatch(线程计数器).CyclicBarrier(回环栅栏).Semaphore(信号量) 以及 Exch ...

最新文章

  1. 搭建 Hadoop 伪分布式环境
  2. ZULUTrade骗局揭秘--一名福汇员工的良心发现
  3. 蓝桥杯java 算法提高 摆花
  4. 从无到有算法养成篇-单向循环链表的常规操作
  5. Visual Studio 2019设置回车代码补全
  6. 提取图片名称 c 语言,【图片】给词法元素分析提取的程序跪了【c语言吧】_百度贴吧...
  7. 从0开始接触html--第一天学习内容总结
  8. java怎么自动提示关键词_Eclipse 实现关键字自动补全功能 (转)
  9. 程序观点下的线性代数
  10. 英特尔助力完善AI人才培养,携手微软共促地球可持续发展
  11. 作者:赵文明(1977-),男,中国科学院北京基因组研究所生命与健康大数据中心高级工程师...
  12. 计算机算法设计与分析 工作安排问题
  13. java 植入 form_pdf form表单制作以及用java程序填充表单
  14. 机器学习实战Ch02: k-近邻算法
  15. 理解Resnet18的18的含义
  16. SurfaceView使用日记(二)--实例:绘画板
  17. 如何写出难以维护的代码--代码命名
  18. 电商后台设计:品类管理
  19. Springboot关于 Circular view path [xxx]: would dispatch back to the current handler URL [xxx] again
  20. 计算机系统概论输入输出,计算机系统概论笔记-4-冯·诺依曼模型

热门文章

  1. SQL实现模糊查询的几种方法总结
  2. 网页登录psn服务器超时,wegame登录超时解决方法 | 手游网游页游攻略大全
  3. 轮回队徽颜色的html,国米新队徽曝光:颜色改为金色,线条更加简洁
  4. 福玛特机器人评测_福玛特E-R300G扫地机器人评测
  5. access可以连接mysql数据库吗_JDBC连接Access数据库的几种方式介绍
  6. element-ui form表单如何逐个验证
  7. 我的世界java服核心下载_我的世界java版
  8. 文远知行杯广东工业大学第十六届 A题 区间最大值
  9. php session 封装类,ThinkPHP5 工具类(三:Session 类) | 剑花烟雨江南
  10. 手机选购:2022年初买手机多大内存合适,看完你就会选了!