【Java】树状节点结构的数据

数据库的菜单,权限表是具有多层级结构,有ID和PARENT_ID两个关键性的字段

通过PARENT_ID和ID相等构建层级结构:

然后需要在Java中构建出层级的数据结构,然后输出成JSON返回给前端渲染:

1、构建Tree的结构体:

字段ID和PARENT_ID,然后和一个必须初始化的List集合、

其他的字段就是要显示的东西,这些随意加

public class WechatOrgTreeDto {private Integer id;
    private Integer parentId;
    private String name;
    private List<WechatOrgTreeDto> list = new ArrayList<>();

    public WechatOrgTreeDto(Integer id, Integer parentId, String name) {
        this.id = id;
        this.parentId = parentId;
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getParentId() {
        return parentId;
    }

    public void setParentId(Integer parentId) {
        this.parentId = parentId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<WechatOrgTreeDto> getList() {
        return list;
    }

    public void setList(List<WechatOrgTreeDto> list) {
        this.list = list;
    }
}

2、构建数据

然后是构建结构的方法:

final String SQL = "SELECT * FROM tt_wechat_org";
// 先查询所有
List<Map> all = DAOUtil.findAll(SQL, null);

List<WechatOrgTreeDto> treeList = new ArrayList<>();
// 第一次遍历是为处理数据
for (Map map : all) {
    treeList.add(new WechatOrgTreeDto(
            Integer.valueOf(map.get("ID").toString()),
            Integer.valueOf(map.get("PARENT_ID").toString()),
            map.get("NAME").toString()
    ));
}

// 第二次遍历开始构建结构
List<WechatOrgTreeDto> wechatOrgTreeDtoList = new ArrayList<>();

for (WechatOrgTreeDto wechatOrgTreeDto : treeList) {
    // 需要头节点装入第一个元素,
    if(1 == wechatOrgTreeDto.getId()) wechatOrgTreeDtoList.add(wechatOrgTreeDto);
    for (WechatOrgTreeDto subTree : treeList) {
        // 第二次便利用子节点的ParentID和父节点ID对比进行添加
        if (subTree.getParentId() .equals(wechatOrgTreeDto.getId()) ) {
            wechatOrgTreeDto.getList().add(subTree);
        }
    }
}
原文地址:https://www.cnblogs.com/mindzone/p/14888046.html