递归的精髓在于某一个方法具体是做什么的!
比如下面setChild(),查询节点所有的子节点。
public List<TreeNode> transDepartment(List<Qydy> rootList){
List<TreeNode> nodeList = new ArrayList<>();
for (Qydy qydy : rootList) {
TreeNode treeNode = new TreeNode();
treeNode.setId(qydy.getQYDY_PKID());
treeNode.setText(qydy.getQYMC());
treeNode.setAttributes(qydy);
//表明是一级父类
if (1==qydy.getCJ()){
// treeNode.setState("open");
nodeList.add(treeNode);
}
treeNode.setChildren(setChild(treeNode.getId(),rootList));
}
return nodeList;
}
//返回当前Id的所有子节点
public List<TreeNode> setChild(String id, List<Qydy> list ){
List<TreeNode> childList = new ArrayList<>();
for (Qydy qydy : list) {
TreeNode treeNode = new TreeNode();
if (id!=null && id.equals(qydy.getQYDY_PPKID())){
treeNode.setId(qydy.getQYDY_PKID());
treeNode.setText(qydy.getQYMC());
treeNode.setParentId(id);
treeNode.setState("close");
treeNode.setAttributes(qydy);
childList.add(treeNode);
}
}
for (TreeNode department : childList) {
List<TreeNode> treeNodes = setChild(department.getId(), list);
if (treeNodes.size()>=1){
department.setState("close");
}
department.setChildren(treeNodes);
}
return childList;
}
递归重点2,递归方法的返回值问题。改写setChild()方法
public void setChild(TreeNode treeNode, List<Qydy> list ){
List<TreeNode> childList = new ArrayList<>();
for (Qydy qydy : list) {
TreeNode treeNode = new TreeNode();
if (treeNode.getId()!=null &&treeNode.getId().equals(qydy.getQYDY_PPKID())){
treeNode.setId(qydy.getQYDY_PKID());
treeNode.setText(qydy.getQYMC());
treeNode.setParentId(id);
treeNode.setState("close");
treeNode.setAttributes(qydy);
childList.add(treeNode);
}
}
treeNode.setChildren(childList)
for (TreeNode department : childList) {
List<TreeNode> treeNodes = setChild(department, list);
if (treeNodes.size()>=1){
department.setState("close");
}
department.setChildren(treeNodes);
}
}