先定义一个Tree对象,不同的Response去继承这个对象
package com.izkml.mlyun.framework.common.utils.tree;
import java.util.ArrayList;
import java.util.List;
public class Tree {
protected List children = new ArrayList();
protected List parent = new ArrayList();
public Tree() {
}
protected Object getTreeId() {
return null;
}
protected Object getTreeParentId() {
return null;
}
public List getParentList() {
return this.parent;
}
public List getChildren() {
return this.children;
}
protected boolean topParentId() {
return "0".equals(this.getTreeParentId());
}
}
封装通用的树结构工具类
package com.izkml.mlyun.framework.common.utils.tree;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Consumer;
public class TreeUtils {
public TreeUtils() {
}
public static <T> List<T> tree(List<T> treeList) {
return tree((List)treeList, (Consumer)null);
}
public static <T> List<T> tree(List<T> treeList, Consumer<Tree> afterAddChildren) {
List<T> resultList = new ArrayList();
Iterator var3 = treeList.iterator();
while(var3.hasNext()) {
T object = var3.next();
Tree tree = (Tree)object;
if(tree.topParentId()) {
resultList.add(tree);
treeRecursion(tree, treeList, afterAddChildren);
}
}
return resultList;
}
public static <T> T tree(Tree TopTree, List<T> treeList) {
treeRecursion(TopTree, treeList, (Consumer)null);
return TopTree;
}
private static void treeRecursion(Tree nodeTree, List<Tree> treeList, Consumer<Tree> afterAddChildren) {
Iterator var3 = treeList.iterator();
while(var3.hasNext()) {
Tree tree = (Tree)var3.next();
if(nodeTree.getTreeId().equals(tree.getTreeParentId())) {
nodeTree.getChildren().add(tree);
treeRecursion(tree, treeList, afterAddChildren);
}
}
if(afterAddChildren != null) {
afterAddChildren.accept(nodeTree);
}
}
public static <T> List<T> treeDesc(Tree nodeTree, List<T> treeList, Consumer<Tree> afterAddChildren) {
List<T> resultList = new ArrayList();
List<Map> strings = new ArrayList();
resultList.add(nodeTree);
if(!Objects.equals(nodeTree.getTreeParentId(), "0")) {
getParentNode(nodeTree, treeList, afterAddChildren, strings);
resultList.addAll(Arrays.asList(new List[]{strings}));
}
return resultList;
}
public static void getParentNode(Tree nodeTree, List<Tree> treeList, Consumer<Tree> afterAddChildren, List<Map> strings) {
Iterator var4 = treeList.iterator();
while(var4.hasNext()) {
Tree tree = (Tree)var4.next();
if(Objects.equals(nodeTree.getTreeParentId(), tree.getTreeId())) {
nodeTree.getParentList().add(tree);
Map nodeMap = new HashMap();
nodeMap.put("parentList", nodeTree.getTreeId().toString());
strings.add(nodeMap);
getParentNode(tree, treeList, afterAddChildren, strings);
}
}
if(afterAddChildren != null) {
afterAddChildren.accept(nodeTree);
}
}
}
递归-根据id获取所有相关联的id
/**
* @param ms
* @param id
* @param ids
* @return
* @Author: Fangh
* @Date: 2020-06-30 15:58:56
* @Description: 递归-根据id获取所有相关联的id
**/
private List<Integer> getIds(List<Organ> ms, int id, List<Integer> ids) {
for (int i = 0; i < ms.size(); i++) {
if (ms.get(i).getManagementId() == id) {
ids.add(ms.get(i).getId());
getIds(ms, ms.get(i).getId(), ids);
}
}
return ids;
}
/**
* @param departmentResponse
* @param departmentResponses
* @param ids
* @return
* @Author: Fangh
* @Date: 2020-08-25 16:38:21
* @Description: 通过当前子节点递归所有的父节点id
**/
private DepartmentResponse getParentDepartmentResponse(DepartmentResponse departmentResponse, List<DepartmentResponse> departmentResponses, List<String> ids) {
if ("0".equals(departmentResponse.getParentId())) {
return departmentResponse;
}
DepartmentResponse tbldepartmentResponse = departmentResponses.stream().filter(
x -> Objects.equals(x.getId(), departmentResponse.getParentId()
)
).findFirst().get();
ids.add(tbldepartmentResponse.getId());
departmentResponses.remove(tbldepartmentResponse);
return getParentDepartmentResponse(tbldepartmentResponse, departmentResponses, ids);
}
/**
* @param unitId
* @param departments
* @return
* @Author: Fangh
* @Date: 2020-08-25 16:38:21
* @Description: 通过当前子节点递归所有的父节点id
**/
private List<String> getChildList(String unitId, List<Department> departments) {
List<String> ids = new ArrayList<>(10);
ids.add(unitId);
for (Department department : departments) {
if (Objects.equals(unitId, department.getParentId())) {
ids.add(department.getId());
departments.remove(department);
getChildList(department.getId(), departments);
}
}
return ids;
}