Java 组装树型数据

目录

提前准备实体类设置:

一:查询所有的数据(表中数据一定要符合树形结构)

二:组装根数据

三:拼接子类数据


提前准备实体类设置:

package net.mingsoft.basic.entity;

import java.sql.Timestamp;
import java.util.List;
import java.util.Objects;

import org.apache.commons.lang3.StringUtils;
import org.springframework.format.annotation.DateTimeFormat;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;

import net.mingsoft.base.constant.e.BaseEnum;
import net.mingsoft.base.entity.BaseEntity;

/**
 * 模块实体
 * @author ms dev group
 * @version
 * 版本号:100-000-000<br/>
 * 创建日期:2012-03-15<br/>
 * 历史修订:<br/>
 */
@TableName("model")
public class ModelEntity extends BaseEntity {

    private static final long serialVersionUID = 8370243529627954524L;

    /**
     * 模块的标题
     */
    private String modelTitle;

    /**
     * 发布时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Timestamp modelDatetime;

    /**
     * 模块父id
     */
    private Integer modelId;


    /**
     * 是否是菜单,数据库字段是model_ismuenu
     */
    @TableField(value = "model_ismenu")
    private Integer modelIsMenu;
    /**
     * 选中状态,不参加表结构
     */
	@TableField(exist = false)
	private int chick;

    /**
     * 树的深度,不参加表结构
     */
	@TableField(exist = false)
	private int depth;
    /**
     * 父级编号集合
     * @return
     */
    private String modelParentIds;

	/**
	 *
	 * 获取层级
	 * @return
	 */
	public int getDepth() {
		if(StringUtils.isNotEmpty(modelParentIds)){
			return depth = modelParentIds.split(",").length;
		}else {
			return depth;
		}

	}

	/**
	 *
	 * 设置层级
	 * @param depth
	 */
	public void setDepth(int depth) {
		this.depth = depth;
	}

	public Integer getModelIsMenu() {
		return modelIsMenu;
	}

	public void setModelIsMenu(Integer modelIsMenu) {
		this.modelIsMenu = modelIsMenu;
	}


    /**
     * 获取modelCode
     * @return modelCode
     */
    public String getModelCode() {
        return modelCode;
    }

    /**
     * 设置modelCode
     * @param modelCode
     */
    public void setModelCode(String modelCode) {
        this.modelCode = modelCode;
    }

    /**
     * 获取modelIcon
     * @return modelIcon
     */
    public String getModelIcon() {
        return modelIcon;
    }

    /**
     * 设置modelIcon
     * @param modelIcon
     */
    public void setModelIcon(String modelIcon) {
        this.modelIcon = modelIcon;
    }


    /**
     * 获取modelUrl
     * @return modelUrl
     */
    public String getModelUrl() {
        return modelUrl;
    }

    /**
     * 设置modelUrl
     * @param modelUrl
     */
    public void setModelUrl(String modelUrl) {
        this.modelUrl = modelUrl;
    }


    /**
     * 获取modelDatetime
     * @return modelDatetime
     */
    public Timestamp getModelDatetime() {
        return modelDatetime;
    }

    /**
     * 设置modelDatetime
     * @param modelDatetime
     */
    public void setModelDatetime(Timestamp modelDatetime) {
        this.modelDatetime = modelDatetime;
    }

    /**
     * 获取modelTitle
     * @return modelTitle
     */
    public String getModelTitle() {
        return modelTitle;
    }

    /**
     * 设置modelTitle
     * @param modelTitle
     */
    public void setModelTitle(String modelTitle) {
        this.modelTitle = modelTitle;
    }


	public Integer getModelSort() {
		return modelSort;
	}

	public void setModelSort(Integer modelSort) {
		this.modelSort = modelSort;
	}

	public List<ModelEntity> getModelChildList() {
		return modelChildList;
	}

	public void setModelChildList(List<ModelEntity> modelChildList) {
		this.modelChildList = modelChildList;
	}

	public int getChick() {
		return chick;
	}

	public void setChick(int chick) {
		this.chick = chick;
	}


	public String getModelParentIds() {
		return modelParentIds;
	}

	public void setModelParentIds(String modelParentIds) {
		this.modelParentIds = modelParentIds;
	}

	/**
	 * 获取菜单类型
	 */
	public String getIsChild() {
		return isChild;
	}
	/**
	 * 设置菜单类型
	 */
	public void setIsChild(String isChild) {
		this.isChild = isChild;
	}

	public Integer getModelId() {
		return modelId;
	}

	public void setModelId(Integer modelId) {
		this.modelId = modelId;
	}


	public enum IsMenu implements BaseEnum{
		NO(0),
		YES(1);
		private int id;
		IsMenu(int id){
			this.id = id;
		}
		@Override
		public int toInt() {
			// TODO Auto-generated method stub
			return this.id;
		}
	}

	@Override
	public boolean equals(Object o) {
		if (o == null) {
			return false;
		}
		return this.id.equals(((ModelEntity)o).getId());
	}

	@Override
	public int hashCode() {
		return Objects.hash(id);
	}

}
/**
 * 用于返回index页的树形菜单
 */
public class MenuModelEntity extends ModelEntity {

    private static final long serialVersionUID = -8018058948896773795L;
    
    /**
	 * 子菜单   主要需要添加的就是这个子类
	 */
	private List<MenuModelEntity> childMenus;

	public List<MenuModelEntity> getChildMenus() {
		return childMenus;
	}

	public void setChildMenus(List<MenuModelEntity> childMenus) {
		this.childMenus = childMenus;
	}
}

一:查询所有的数据(表中数据一定要符合树形结构)

List<ModelEntity> modelList = xxxService.getList(token);//这里这是查询一个列表数据

二:组装根数据

List<MenuModelEntity> menuList = Lists.newArrayList();//菜单的数据
for (MenuModelEntity modelEntity : menuAll) {
     if (modelEntity.getModelId() == null) {//根级菜单(我的根节点这个字段是null)
         menuList.add(modelEntity);
     }
}

三:拼接子类数据

//给根节点菜单拼接子数据
for (MenuModelEntity menuModelEntity : menuList) {                                
     menuModelEntity.setChildMenus(
           getChild(Integer.parseInt(menuModelEntity.getId()), menuAll));
}



/**
     * 菜单生成树形
     *
     * @param id 父级id
     * @param rootMenu 第一步查询到的所有的数据
     * @return
     */
    public static List<MenuModelEntity> getChild(Integer id, List<MenuModelEntity> 
rootMenu) {
        // 子菜单
        List<MenuModelEntity> childList = new ArrayList<>();
        for (MenuModelEntity menu : rootMenu) {
            // 遍历所有节点,将父菜单id与传过来的id比较
            if (menu.getModelId() != null && menu.getModelId().equals(id) && !menu.getId().equals("1768")) {
                childList.add(menu);
            }
        }
        // 判断递归结束
        if (childList.size() == 0) {
            return null;
        }
        // 把子菜单的子菜单再循环一遍
        for (MenuModelEntity menu : childList) {
            menu.setChildMenus(getChild(Integer.parseInt(menu.getId()), rootMenu));// 递归
        }
        return childList;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值