欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java枚舉轉(zhuǎn)list通用類過程

 更新時(shí)間:2025年03月08日 09:21:29   作者:gusijin  
文章介紹了如何將Java枚舉類型轉(zhuǎn)換為List<Map<String, Object>>的通用類,該類可以實(shí)現(xiàn)枚舉到列表的轉(zhuǎn)換,并且示例了使用方法

java枚舉轉(zhuǎn)list通用類

一、目的

實(shí)現(xiàn)枚舉轉(zhuǎn)list

轉(zhuǎn)成如下:

[
        {
            "name": "PC后臺(tái)",
            "value": 1
        },
        {
            "name": "貨主端應(yīng)用",
            "value": 2
        }
    ]

二、枚舉類

public class SysRoleEnum {

    /**
     * 平臺(tái)類型
     */
    @Getter
    @AllArgsConstructor
    public enum PlatformTypeEnum implements ICommonEnum {
        pcBackground(1, "PC后臺(tái)"),
        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);

請(qǐng)求顯示

[
        {
            "name": "PC后臺(tái)",
            "value": 1
        },
        {
            "name": "貨主端應(yīng)用",
            "value": 2
        }
]

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringMVC和rabbitmq集成的使用案例

    SpringMVC和rabbitmq集成的使用案例

    這篇文章主要介紹了SpringMVC和rabbitmq集成的使用案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Spark學(xué)習(xí)筆記 (二)Spark2.3 HA集群的分布式安裝圖文詳解

    Spark學(xué)習(xí)筆記 (二)Spark2.3 HA集群的分布式安裝圖文詳解

    這篇文章主要介紹了Spark2.3 HA集群的分布式安裝,結(jié)合圖文與實(shí)例形式詳細(xì)分析了Spark2.3 HA集群分布式安裝具體下載、安裝、配置、啟動(dòng)及執(zhí)行spark程序等相關(guān)操作技巧,需要的朋友可以參考下
    2020-02-02
  • SpringBoot項(xiàng)目@Async方法問題解決方案

    SpringBoot項(xiàng)目@Async方法問題解決方案

    這篇文章主要介紹了SpringBoot項(xiàng)目@Async方法問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • mybatis @Alias注解在類上的使用方式(推薦)

    mybatis @Alias注解在類上的使用方式(推薦)

    這篇文章主要介紹了mybatis @Alias注解在類上的使用方式,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-05-05
  • MybatisPlus使用@TableLogic實(shí)現(xiàn)邏輯刪除過程

    MybatisPlus使用@TableLogic實(shí)現(xiàn)邏輯刪除過程

    這篇文章主要介紹了MybatisPlus使用@TableLogic實(shí)現(xiàn)邏輯刪除過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • java編程之遞歸算法總結(jié)

    java編程之遞歸算法總結(jié)

    這篇文章主要介紹了java編程之遞歸算法總結(jié),具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • java 設(shè)計(jì)模式之單例的實(shí)例詳解

    java 設(shè)計(jì)模式之單例的實(shí)例詳解

    這篇文章主要介紹了java 設(shè)計(jì)模式之單例的實(shí)例詳解的相關(guān)資料, 希望通過本文能幫助到大家,讓大家徹底理解掌握單例模式,需要的朋友可以參考下
    2017-09-09
  • Zookeeper實(shí)現(xiàn)分布式鎖代碼實(shí)例

    Zookeeper實(shí)現(xiàn)分布式鎖代碼實(shí)例

    這篇文章主要介紹了Zookeeper實(shí)現(xiàn)分布式鎖代碼實(shí)例,Zookeeper?分布式鎖應(yīng)用了其?臨時(shí)順序節(jié)點(diǎn)?的特性,在Zookeeper中創(chuàng)建一個(gè)持久節(jié)點(diǎn)ParentLock,當(dāng)?shù)谝粋€(gè)客戶端要獲取鎖時(shí),在ParentLock節(jié)點(diǎn)下創(chuàng)建一個(gè)臨時(shí)順序節(jié)點(diǎn),需要的朋友可以參考下
    2023-12-12
  • Java中的字符串常量池詳細(xì)介紹

    Java中的字符串常量池詳細(xì)介紹

    這篇文章主要介紹了Java中的字符串常量池詳細(xì)介紹,JVM為了減少字符串對(duì)象的重復(fù)創(chuàng)建,其維護(hù)了一個(gè)特殊的內(nèi)存,這段內(nèi)存被成為字符串常量池或者字符串字面量池,需要的朋友可以參考下
    2015-01-01
  • Java實(shí)現(xiàn)記事本功能

    Java實(shí)現(xiàn)記事本功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)記事本功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06

最新評(píng)論