经常会面临这样的需求,返回一个多级的tree。在此记录一下希望能帮助到大家。
首先先创建一个TreeModel 。
@Data
public class TreeModel {
private String id;
private String name;
private String pid;
private String type;
public TreeModel(String id, String name, String pid, String type) {
this.id = id;
this.name = name;
this.pid = pid;
this.type = type;
}
private List<TreeModel> treeModels;
public static List<TreeModel> buildTree(List<TreeModel> treeModels,String id){
for (TreeModel treeModel :
treeModels) {
treeModel.setTreeModels(treeModels.stream().filter(p->p.getPid().equals(treeModel.getId())).collect(Collectors.toList()));
}
return treeModels.stream().filter(p->p.id.equals(id)).collect(Collectors.toList());
}
@Override
public String toString() {
return "TreeModel{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", pid='" + pid + '\'' +
", type='" + type + '\'' +
'}';
}
}
2、引用
// 创建一个 TreeModel 集合
List<TreeModel> list = new ArrayList<>();
// 获取到 部门 List
List<SysDept> depts= ....
// 获取到 下一级 List
List<Line> lines = ...
// 多级 ....
// 进行调用
for (SysDept dept : depts) {
list.add(new TreeModel("dept_" + dept.getDeptId(), dept.getDeptName(), "dept_" + dept.getParentId(), "Dept"));
}
for (TbPatrolLine line:lines) {
list.add(new TreeModel("line_" + line.getId(), line.getName(), "dept_" + line.getDeptId(), "Line"));
}
// 排序 其中 dept_100 100 是我部门的最高级,这里建议你 查出 最高级别
List<TreeModel> result = TreeModel.buildTree(list, "dept_100");
// 返回
return result;
一个简单的多级tree 就封装好了。