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