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 } ]
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论