java枚舉轉(zhuǎn)list通用類過程
更新時間:2025年03月08日 09:21:29 作者:gusijin
文章介紹了如何將Java枚舉類型轉(zhuǎn)換為List<Map<String, Object>>的通用類,該類可以實現(xiàn)枚舉到列表的轉(zhuǎn)換,并且示例了使用方法
java枚舉轉(zhuǎn)list通用類
一、目的
實現(xiàn)枚舉轉(zhuǎn)list
轉(zhuǎn)成如下:
[
{
"name": "PC后臺",
"value": 1
},
{
"name": "貨主端應(yīng)用",
"value": 2
}
]二、枚舉類
public class SysRoleEnum {
/**
* 平臺類型
*/
@Getter
@AllArgsConstructor
public enum PlatformTypeEnum implements ICommonEnum {
pcBackground(1, "PC后臺"),
customerSystem(2, "貨主端應(yīng)用");
private Integer value;
private String name;
}
}
三、解決方案
java枚舉類轉(zhuǎn)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枚舉類轉(zhuǎn)List<Map<String, Object>>集合
*
* @param enumClass
* @return null-該class不是枚舉類型 []-該枚舉類型沒有自定義字段 list-獲取該枚舉類型的List<Map>返回結(jié)果
*/
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": "貨主端應(yīng)用",
"value": 2
}
]總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Boot 訪問安全之認證和鑒權(quán)詳解
這篇文章主要介紹了Spring Boot 訪問安全之認證和鑒權(quán),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
Springcloud-nacos實現(xiàn)配置和注冊中心的方法
這篇文章主要介紹了Springcloud-nacos實現(xiàn)配置和注冊中心的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Spring Boot+Drools規(guī)則引擎整合詳解
本篇文章主要介紹了Spring Boot+Drools規(guī)則引擎整合,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09

