用到时,找的时间比撸的时间还长,节省时间记录一下
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.linkedHashMap;
import java.util.List;
import java.util.Map;
@Component
@Slf4j
public class TreeUtil {
public List tree;
public List treeMenu(List treeData, String rootId) {
this.tree = treeData;
return child(rootId);
}
public List child(String id) {
List lists = new ArrayList();
for (T treeNode : tree) {
Map childArray = new linkedHashMap();
try {
//获取父节点id
Field f = treeNode.getClass().getDeclaredField("pId");
f.setAccessible(true);
Object pId = f.get(treeNode);
if (pId.equals(id)) {
setTreeMap(childArray, treeNode);
lists.add(childArray);
}
} catch (NoSuchFieldException | IllegalAccessException e) {
log.error(e.getMessage(), e);
}
}
return lists;
}
private void setTreeMap(Map mapArr, T treeNode) {
try {
//获取所有属性字段,组装
Field[] fs = treeNode.getClass().getDeclaredFields();
for (Field f : fs) {
f.setAccessible(true);
String name = f.getName();
Object o = f.get(treeNode);
mapArr.put(name, o);
if ("children".equals(f.getName())) {
Field field = treeNode.getClass().getDeclaredField("id");
field.setAccessible(true);
Object obj = field.get(treeNode);
mapArr.put("children", child(String.valueOf(obj)));
}
}
} catch (NoSuchFieldException | IllegalAccessException e) {
log.error(e.getMessage(), e);
}
}
}
List treeData = treeUtil.treeMenu(roleArr.toJavaList(XXX.class),"0");