您的位置:首页 > 编程语言 > Java开发

java实现类似ztree的json格式查询

2018-01-24 19:45 393 查看
在web系统中,尤其是一些管理系统,比如权限分配,会有查询菜单树形结构的需求。

一般java后台需要返回json格式的数据,比如ztree

var zTreeNodes = [
{"id":1, "name":"test1", "nodes":[
{"id":11, "name":"test11", "nodes":[
{"id":111, "name":"test111"}
]},
{"id":12, "name":"test12"}
]},
......
];

对应后台表结构可以设计如下

CREATE TABLE `organ` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(64) DEFAULT NULL COMMENT '名称',
`type` tinyint(4) DEFAULT NULL COMMENT '节点类型',
`priority` tinyint(4) DEFAULT '1' COMMENT '排序',
`parent_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '父ID'
PRIMARY KEY (`id`)
)

java代码

/**
* 组织树结构
* @param list
* @param <T>
* @return
*/
public static <T extends BaseTreeNodeVO> T assembleTree(List<T> list){

if(list.isEmpty()){
return null;
}

//取出根节点
T root = list.get(0);
//临时存放所有节点
Map<Long, T> nodeMap = new HashMap<>();
list.stream().forEach(o -> nodeMap.put(o.getId(), o));
//找出节点关系
list.subList(1, list.size()).stream().forEach(m -> nodeMap.get(m.getParentId()).appendChild(m));
nodeMap.clear();

return root;
}

对于调用处,只要查询出对应的机构数据集合即可进行组合成树结构

public class BaseTreeNodeVO {

/**主键ID*/
protected Long id;

/**父ID*/
protected Long parentId;

/**下级节点*/
protected List<BaseTreeNodeVO> children = new ArrayList<>();

public void appendChild(BaseTreeNodeVO organTree){
this.children.add(organTree);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: