当前位置: 代码网 > it编程>编程语言>Java > java枚举转list通用类过程

java枚举转list通用类过程

2025年03月08日 Java 我要评论
java枚举转list通用类一、目的实现枚举转list转成如下:[ { "name": "pc后台", "value": 1 }

java枚举转list通用类

一、目的

实现枚举转list

转成如下:

[
        {
            "name": "pc后台",
            "value": 1
        },
        {
            "name": "货主端应用",
            "value": 2
        }
    ]

二、枚举类

public class sysroleenum {

    /**
     * 平台类型
     */
    @getter
    @allargsconstructor
    public enum platformtypeenum implements icommonenum {
        pcbackground(1, "pc后台"),
        customersystem(2, "货主端应用");
        private integer value;
        private string name;
    }
}

三、解决方案

java枚举类转list<map<string, object>>集合通用类

import lombok.extern.slf4j.slf4j;
import org.apache.commons.lang3.stringutils;
import org.springframework.util.collectionutils;

import java.lang.reflect.field;
import java.lang.reflect.method;
import java.util.*;

@slf4j
public class enumutil {

    /**
     * java枚举类转list<map<string, object>>集合
     *
     * @param enumclass
     * @return null-该class不是枚举类型  []-该枚举类型没有自定义字段  list-获取该枚举类型的list<map>返回结果
     */
    public static list<map<string, object>> enumtolistmap(class<?> enumclass) {
        list<map<string, object>> resultlist = new arraylist<>();
        if (!"java.lang.enum".equals(enumclass.getsuperclass().getcanonicalname())) {
            return resultlist;
        }
        // 获取所有public方法
        method[] methods = enumclass.getmethods();
        list<field> fieldlist = new arraylist<>();
        // step 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) {
                log.error(e.getmessage(), e);
            }
        });

        // step 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) {
                    log.error(e.getmessage(), e);
                }
            }
            // 将map添加到集合中
            resultlist.add(map);
        }

        return resultlist;
    }
}

使用方法

enumutil.enumtolistmap(sysroleenum.platformtypeenum.class);

请求显示

[
        {
            "name": "pc后台",
            "value": 1
        },
        {
            "name": "货主端应用",
            "value": 2
        }
]

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com