添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在开发过程中,经常会遇到需要根据枚举的code获取对应name或根据name获取对应code的需求;抑或是需要根据code或name获取对应枚举对象。
在开发过程中,前端需要获取下拉选择器中的数据项,通常存放数据库字典表中,本文采取返回枚举列表的方式提供。

一、Enum根据code/name获取枚举对象、根据code获取name、根据name获取code。

    @Getter
    @AllArgsConstructor
    public enum BorrowStatusEnum {
         * 借基差还款状态
        IN_USE("IN_USE", "使用中"),
        OVERDUE("OVERDUE", "已超期"),
        DEDUCTION("DEDUCTION", "抵扣中"),
        FINISH("FINISH", "已还款");
        public final String code;
        public final String name;
         * 根据code查找
         * @param code 枚举code
         * @return 枚举对象
        public static BorrowStatusEnum findEnumByCode(String code) {
            for (BorrowStatusEnum statusEnum : BorrowStatusEnum.values()) {
                if (statusEnum.getCode().equals(code)) {
                    //如果需要直接返回name则更改返回类型为String,return statusEnum.name;
                    return statusEnum;
            throw new IllegalArgumentException("code is invalid");
         * 根据name查找
         * @param name 枚举name
         * @return 枚举对象
        public static BorrowStatusEnum findEnumByName(String name) {
            for (BorrowStatusEnum statusEnum : BorrowStatusEnum.values()) {
                if (statusEnum.getName().equals(name)) {
                    //如果需要直接返回code则更改返回类型为String,return statusEnum.code;
                    return statusEnum;
            throw new IllegalArgumentException("name is invalid");
    public static void main(String[] args) {
        System.out.println("根据code获取枚举对象:" + BorrowStatusEnum.findEnumByCode("IN_USE"));
        System.out.println("根据name获取枚举对象:" + BorrowStatusEnum.findEnumByName("已还款"));
        System.out.println("根据code获取name:" + BorrowStatusEnum.findEnumByCode("IN_USE").name);
        System.out.println("根据name获取code:" + BorrowStatusEnum.findEnumByName("已还款").code);
根据code获取枚举对象:IN_USE
根据name获取枚举对象:FINISH
根据code获取name:使用中
根据name获取code:FINISH

二、获取Enum列表

@Getter
    @AllArgsConstructor
    public enum BorrowStatusEnum {
         * 借基差还款状态
        IN_USE("IN_USE", "使用中"),
        OVERDUE("OVERDUE", "已超期"),
        DEDUCTION("DEDUCTION", "抵扣中"),
        FINISH("FINISH", "已还款");
        public final String code;
        public final String name;
         * 转为数据
         * @return 枚举对象数组
        public static List<Map<String, String>> toList() {
            List<Map<String, String>> list = new ArrayList<>();
            for (BorrowStatusEnum item : BorrowStatusEnum.values()) {
                Map<String, String> map = new HashMap<>();
                map.put("code", item.getCode());
                map.put("name", item.getName());
                list.add(map);
            return list;
    public static void main(String[] args) {
        System.out.println("enum toString:" + BorrowStatusEnum.toList());
enum toString:[{code=IN_USE, name=使用中}, {code=OVERDUE, name=已超期}, {code=DEDUCTION, name=抵扣中}, {code=FINISH, name=已还款}]

三、附上获取Enum列表工具类(使用工具类就不需要每个Enum都加一遍toList方法了!)

public class EnumUtils {
    private static final String ENUM_CLASSPATH ="java.lang.Enum";
    public static List<Map<String, Object>> enumToListMap(Class<?> enumClass) {
        List<Map<String, Object>> resultList= new ArrayList<>();
        if (!ENUM_CLASSPATH.equals(enumClass.getSuperclass().getCanonicalName())) {
            return resultList;
        // 获取所有public方法
        Method[] methods = enumClass.getMethods();
        List<Field> fieldList = new ArrayList<>();
        //1.通过get方法提取字段,避免get作为自定义方法的开头,建议使用 ‘find’或其余命名
        Arrays.stream(methods)
                .map(Method::getName)
                .filter(
                        methodName -> methodName.startsWith("get") && !"getDeclaringClass".equals(methodName) && !"getClass".equals(methodName)
                ).forEachOrdered(methodName -> {
            try {
                Field field = enumClass.getDeclaredField(StringUtils.uncapitalize(methodName.substring(3)));
                fieldList.add(field);
            } catch (NoSuchFieldException | SecurityException e) {
                e.printStackTrace();
        });
        //2.将字段作为key,逐一把枚举值作为value 存入list
        if (CollectionUtils.isEmpty(fieldList)) {
            return resultList;
        Enum[] enums = (Enum[]) enumClass.getEnumConstants();
        for (Enum anEnum : enums) {
            Map<String, Object> map = new HashMap<>(fieldList.size());
            for (Field field : fieldList) {
                field.setAccessible(true);
                try {
                    // 向map集合添加字段名称 和 字段值
                    map.put(field.getName(), field.get(anEnum));
                } catch (IllegalArgumentException | IllegalAccessException e) {
                    e.printStackTrace();
            // 将Map添加到集合中
            resultList.add(map);
        return resultList;
    public static void main(String[] args) {
        //调用时需传入枚举类.class
        System.out.println("EnumUtils.enumToListMap:" + EnumUtils.enumToListMap(StatusEnum.BorrowStatusEnum.class));
EnumUtils.enumToListMap:[{name=使用中, code=IN_USE}, {name=已超期, code=OVERDUE}, {name=抵扣中, code=DEDUCTION}, {name=已还款, code=FINISH}]
工具类参考博客:https://blog.csdn.net/qq_35387940/article/details/113772411
场景:在开发过程中,经常会遇到需要根据枚举的code获取对应name或根据name获取对应code的需求;抑或是需要根据code或name获取对应枚举对象。在开发过程中,前端需要获取下拉选择器中的数据项,通常存放数据库字典表中,本文采取返回枚举列表的方式提供。一、Enum根据code/name获取枚举对象、根据code获取name、根据name获取code。 @Getter @AllArgsConstructor public enum BorrowStatusEnum {
在开发的过程中我们经常会定义枚举类枚举类获取枚举的方式也有很多种,下面我们就探究一下大家常用的几种方式: public enum TestEnum { ONE(1,"one"), ZERO(0,"zero"), TWO(2,"two"), FOUR(4,"four"), TestEnum (int id, String name) ......
// XxxEnum->枚举类; e.getXxx()->根据那个属性获取枚举对象 public static XxxEnum getEnumObjByKey(Integer key){ Optional<XxxEnum> any = Arrays.stream(XxxEnum.class.getEnumConstants()).filter(e -> e.getXxx().equals(key)).findAny(); if (any.is.
【注意事项】 Bulleted lists are useful if the order of the items doesn't matter. However, if the order is essential, we could organize the items by giving them numbers and creating a sorted list.【LaTeX代码】 \documentclass[UTF8]{article} \usepackage{ctex} \begin{
Java1.5提供了关键字enum,能够通过该关键字方便得定义自己须要的枚举类型,比方   enum Season {   SPRING, SUMMER, AUTUMN, WINTER   定义了一个季节枚举类型。   在本例中,对于Season.SPRING这个对象,Season.SPRING.name()能够得到该对象的字符串,即“SPRING”;反之,由Season.valueOf(“SPRING”)则能够得到该对象,即Season.SPRING。也是说,使用name()方法和valueOf(String)方法能够在枚举类对象和字符串之间方便得转换。当然,假设valu
1.枚举类的理解:类的对象只有有限个,确定的。我们称此为枚举类 2.当需要定义一组常量时,强烈建议使用枚举类。 3.如果枚举类中只有一个对象,则可以作为单例模式的实现方式。 二、如何定义枚举类 方式一:Jdk5.0之前,自定义枚举类 方式二:jdk5.0之后,可以使用enum关键字定义枚举类 三、Enum类的主要方法: 四、使用enum关键字定义的枚举类实现接口的情况 栗子一:实现接口,在enum类中实现抽象方法。 栗子二:让枚举类对象分别实现接口中的抽象方法。 五、注解(Annotation)概述 二、常见的Annotation 示例: 六、JDK中的元 2、枚举类实现CodeEnum接口,并重写方法 import com.chuai.ecshop.utils.enumUtils.CodeEnum; import lombok.Getter; @Getter publi...
Java中,枚举类型是一种特殊的数据类型,它有一组已知的,每个都是唯一的,并且固定不变。我们可以使用枚举类型来定义一组常量,以便在程序中进行比较、判断和操作。 在Java中,如果我们已经定义了一个枚举类型,并且想要根据枚举获取枚举类型,则可以使用静态方法valueOf()。该方法可以接受一个字符串参数,该字符串必须是当前枚举类型中定义的枚举常量的名称,返回枚举类型的实例。 例如,假设我们定义了一个名为Color的枚举类型,其中包含RED、GREEN和BLUE三个枚举常量: enum Color { RED, GREEN, BLUE; 现在,我们想要根据字符串"GREEN"获取枚举类型Color.GREEN。我们可以这样做: Color color = Color.valueOf("GREEN"); 上面的代码将返回Color.GREEN,将其赋给变量color。 需要注意的是,如果传递给valueOf()方法的字符串不是当前枚举类型中定义的任何一个枚举常量的名称,则会抛出IllegalArgumentException异常。因此,在使用valueOf()方法时,需要确保传递的字符串是有效的枚举常量名称。