在工作中菜单多的情况,会遇到list列表转为树形结构的菜单,特此记录下利用反射实现
一、实体类中格式
@ApiModel(value="系统菜单表")
@Data
public class Menu implements Serializable {
private static final long serialVersionUID = 1L;
@TreeField(TreeField.Field.ID)
@ApiModelProperty(value = "ID")
private String id;
@ApiModelProperty(value = "父ID")
@TreeField(TreeField.Field.PARENDID)
private String parentId;
@ApiModelProperty(value = "菜单名称")
private String menuName;
@ApiModelProperty(value = "菜单路径")
private String menuUrl;
@ApiModelProperty(value = "图标")
private String menuIcon;
@ApiModelProperty(value = "子菜单")
private List
二、自定义注解(通过反射)
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@documented
public @interface TreeField {
Field value();
enum Field {
ID, PARENDID, CHILDREN
}
}
三、工具类
import java.lang.reflect.Field;
import java.util.*;
public class TreeUtil {
public static List listToTree(List list) {
List roots = new ArrayList<>();
if (list == null || list.size() == 0) {
return roots;
}
Class> clazz = list.get(0).getClass();
Field idField = getField(clazz, TreeField.Field.ID);
Field pIdField = getField(clazz, TreeField.Field.PARENTID);
Field childrenField = getField(clazz, TreeField.Field.CHILDREN);
try {
T parent;
Map



