layui树形菜单格式,java实现

springboot jpa Lombok(以空间换时间,克隆一个集合用来存剩下的节点) 

递归将平级list转换父子关系

  public Object getTreeList() {
        ArrayList<MenuTree> treeList = menuDao.getTreeList();
        ArrayList<MenuTree> trees = (ArrayList<MenuTree>) treeList.clone();
        ArrayList<MenuTree> roots= new ArrayList<>();
        for(MenuTree menuTree :treeList){
            if(menuTree.getPid().equals("0")){
                roots.add(menuTree);
                trees.remove(menuTree);
            }
        }
        treeList = convertTree(roots,trees);
        return treeList;
    }

    public ArrayList<MenuTree> convertTree(ArrayList<MenuTree>roots,ArrayList<MenuTree> trees) {
        if(trees.size()==0)return roots;
        ArrayList<MenuTree> leafs = new ArrayList<>();
        ArrayList<MenuTree> remains = new ArrayList<>();
        remains = (ArrayList<MenuTree>) trees.clone();
        for (MenuTree root : roots) {
            for (MenuTree leaf : trees) {
                if (root.getId().equals(leaf.getPid())) {
                    root.getChildren().add(leaf);
                    leafs.add(leaf);
                    remains.remove(leaf);
                }
            }
        }
        convertTree(leafs,remains);
        return roots;
    }

MenuTree实体

import lombok.Data;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Transient;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

@Data
@Entity
public class MenuTree implements Serializable {
    @Id
    private String id;
    private String pid;
    private String label;
    private String type;
    private String status;
    private String href;

    @Transient
    private List<MenuTree> children = new ArrayList<>();


    public MenuTree(String id, String pid, String label) {
        this.id = id;
        this.pid = pid;
        this.label = label;
    }

}

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值