列舉樹形結構

一、實作父子級列舉樹形結構
1.創建一個物體類
代碼如下(示例):
import lombok.Data;
import java.util.List;
/**
* @ClassName EnumInfo
* @Description TODO
* @Author 碼頭土夫子_Gao
* @Date 2021/12/16 8:40
* @Version 1.0
**/
@Data
public class EnumInfo {
private Integer code;
private String remark;
private List<EnumInfo> children;
}
2.父類列舉類NoticeTypeEnum
代碼如下(示例):
import java.util.*;
public enum NoticeTypeEnum {
SYSTEM(1, "系統通知") {
@Override
public List<MessageTypeEnum> getMessageTypes() {
return Arrays.asList(MessageTypeEnum.ORDER, MessageTypeEnum.REFUND, MessageTypeEnum.AFTERSALE, MessageTypeEnum.COUPON);
}
},
INTERACTION(2, "互動通知") {
@Override
public List<MessageTypeEnum> getMessageTypes() {
return Arrays.asList(MessageTypeEnum.COMMENT, MessageTypeEnum.LIKE, MessageTypeEnum.REPLY);
}
},
DELIVER(3, "物流通知") {
@Override
public List<MessageTypeEnum> getMessageTypes() {
return Arrays.asList(MessageTypeEnum.SHIPMENTS, MessageTypeEnum.SIGNFOR);
}
},
ACTIVITY(4, "活動通知") {
@Override
public List<MessageTypeEnum> getMessageTypes() {
return Arrays.asList(MessageTypeEnum.ACTIVITY);
}
};
private NoticeTypeEnum(Integer code, String remark) {
this.code = code;
this.remark = remark;
}
private Integer code;
private String remark;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public abstract List<MessageTypeEnum> getMessageTypes();
/**
* @param code
* @description: 通過code獲取
* @return: NoticeTypeEnum
* @author: 碼頭土夫子_Gao
* @Date: 2021/12/16 8:39
*/
public static NoticeTypeEnum getEnumByCode(Integer code) {
if (code != null) {
for (NoticeTypeEnum instance : NoticeTypeEnum.values()) {
if (code.equals(instance.code)) {
return instance;
}
}
}
return null;
}
}
3.子類列舉類MessageTypeEnum
代碼如下(示例):
public enum MessageTypeEnum {
ORDER(1, "訂單提醒"),
REFUND(2, "退款提醒"),
AFTERSALE(4, "售后提醒"),
COUPON(5, "優惠券提醒"),
ACTIVITY(6, "活動通知"),
COMMENT(7, "評論通知"),
REPLY(8, "回復通知"),
LIKE(9, "點贊通知"),
SHIPMENTS(10, "發貨通知"),
SIGNFOR(11, "簽收通知");
private Integer code;
private String remark;
private MessageTypeEnum(Integer code, String remark) {
this.code = code;
this.remark = remark;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
4.main方法進行測驗(我這里為了省事寫在了物體類當中)
代碼如下(示例):
@Data
public class EnumInfo {
private Integer code;
private String remark;
private List<EnumInfo> children;
public static void main(String[] args) {
List<EnumInfo> enumInfos = new ArrayList<>();
for (int i = 1; i <= NoticeTypeEnum.values().length; i++) {
EnumInfo enumInfo = new EnumInfo();
NoticeTypeEnum noticeTypeEnum = NoticeTypeEnum.getEnumByCode(i);
enumInfo.setCode(noticeTypeEnum.getCode());
enumInfo.setRemark(noticeTypeEnum.getRemark());
enumInfo.setChildren(getMessageTypeEnumList(noticeTypeEnum.getMessageTypes()));
enumInfos.add(enumInfo);
}
System.out.println("資料:" + JSON.toJSONString(enumInfos));
}
private static List<EnumInfo> getMessageTypeEnumList(List<MessageTypeEnum> messageTypeEnums) {
List<EnumInfo> enumInfos = new ArrayList<>();
for (MessageTypeEnum messageTypeEnum : messageTypeEnums) {
EnumInfo enumInfo = new EnumInfo();
enumInfo.setCode(messageTypeEnum.getCode());
enumInfo.setRemark(messageTypeEnum.getRemark());
enumInfos.add(enumInfo);
}
return enumInfos;
}
}
5.回傳資料
二、回傳資料結構示意如下圖
JSON格式資料

通過在線JSON轉化以后如下

總結
列舉樹形結構在實際場景運用也是很多的,實作多層嵌套可根據該Demo進行改造
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/382911.html
標籤:其他
