实体类生成树结构

生成树结构


实体类

@Accessors(chain = true)
@Data
public class Menu {
    private Integer id;		//	主键
    private String name;	//	菜单名
    private Integer parentId; 	//	父菜单id
    private Menu parent;	// 父菜单
    private Collection<Menu> childList;	
}

工具类

public class TreeUtil {
    //	生成树结构
    public static Menu buildTree(List<Menu> data){
        Menu ret = null;
        if(data != null){
            Map<Integer, Menu> map = new HashMap<>();
            for(Menu menu : data){
                map.put(menu.getId(), menu);

            }
            for(Menu menu : data){
                Integer parentId = menu.getParentId();
                Menu parent = map.get(parentId);
                if(parent != null){
                    Collection<Menu> childList = parent.getChildList();
                    if(childList == null){
                        childList = new TreeSet<Menu>(new Comparator<Menu>(){
                            @Override
                            public int compare(Menu c1, Menu c2) {
                                Integer o1 = c1.getId();
                                Integer o2 = c2.getId();
                                if(o1 != null && o2 != null && o1.intValue() > o2.intValue()){
                                    return 1;
                                }
                                return -1;
                            }
                        });
                        parent.setChildList(childList);
                    }
                    childList.add(menu);
                }
                if(parentId != null && parentId == -1){
                    ret = menu;
                }
            }
        }
        return  ret;
    }
    //	准备数据
    public static List<Menu> getData(){
        ArrayList<Menu> data = new ArrayList<>();
        data.add(new Menu().setId(4).setName("华为电脑").setParentId(1));
        data.add(new Menu().setId(5).setName("苹果电脑").setParentId(1));
        data.add(new Menu().setId(1).setName("电脑").setParentId(0));
        data.add(new Menu().setId(2).setName("手机").setParentId(0));
        data.add(new Menu().setId(3).setName("衣服").setParentId(0));
        data.add(new Menu().setId(6).setName("小米电脑").setParentId(1));
        data.add(new Menu().setId(7).setName("汽车").setParentId(0));
        data.add(new Menu().setId(8).setName("红旗").setParentId(7));
        data.add(new Menu().setId(9).setName("奔驰").setParentId(7));
        data.add(new Menu().setId(10).setName("布加迪").setParentId(7));
        data.add(new Menu().setId(11).setName("红旗 H7").setParentId(8));
        data.add(new Menu().setId(12).setName("奔驰大G").setParentId(9));
        data.add(new Menu().setId(13).setName("华为Mate 9 pro").setParentId(4));
        data.add(new Menu().setId(14).setName("华为手机").setParentId(2));
        data.add(new Menu().setId(0).setName("所有分类").setParentId(-1));
        data.add(new Menu().setId(15).setName("小米手机").setParentId(2));
        return data;
    }

}

启动类

public class Launch {
    public static void main(String[] args) {
        List<Menu> data = TreeUtil.getData();
        Menu menu = TreeUtil.buildTree(data);
        System.out.println(menu.toString());
    }
}

结果

(id=0, 
name=所有分类, 
parentId=-1, 
parent=null, 
childList=[
    (id=1, name=电脑, parentId=0, parent=null, childList=[
        (id=4, name=华为电脑, parentId=1, parent=null, childList=[
            (id=13, name=华为Mate 9 pro, parentId=4, parent=null, childList=null)]), 
        (id=5, name=苹果电脑, parentId=1, parent=null, childList=null), 
        (id=6, name=小米电脑, parentId=1, parent=null, childList=null)]), 
    (id=2, name=手机, parentId=0, parent=null, childList=[
        (id=14, name=华为手机, parentId=2, parent=null, childList=null), 
        (id=15, name=小米手机, parentId=2, parent=null, childList=null)]), 
    (id=3, name=衣服, parentId=0, parent=null, childList=null), 
    (id=7, name=汽车, parentId=0, parent=null, childList=[
        (id=8, name=红旗, parentId=7, parent=null, childList=[
            (id=11, name=红旗 H7, parentId=8, parent=null, childList=null)]), 
        (id=9, name=奔驰, parentId=7, parent=null, childList=[
            (id=12, name=奔驰大G, parentId=9, parent=null, childList=null)]), 
        (id=10, name=布加迪, parentId=7, parent=null, childList=null)])
])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值