java树形结构组装工具类
程序员文章站
2022-06-25 20:26:38
...
import java.util.ArrayList;
import java.util.List;
import lombok.Data;
@Data
public class BillTreeDto {
/**
* 当前节点id
*/
private String id;
/**
* 父节点id
*/
private String parentId;
/**
* 名称
*/
private String name;
private List<BillTreeDto> childsList = new ArrayList<BillTreeDto>();
}
package com.ufgov.pvdf.util;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.ufgov.pvdf.billparse.dto.BillTreeDto;
public class TreeUtil {
public List<BillTreeDto> getTreeData(List<BillTreeDto> list) {
List<BillTreeDto> returnList = new ArrayList<BillTreeDto>();
for (Iterator<BillTreeDto> iterator = list.iterator(); iterator.hasNext();) {
BillTreeDto res = iterator.next();
//判断是否为第一个节点:parentId为空
if (StringUtil.isEmptyString(res.getParentId())) {
recursionFn(list, res);
returnList.add(res);
}
}
return returnList;
}
/**
* 递归寻找子节点
* @Title: recursionFn
* @Description: 递归寻找子节点
* @param beans 所有节点
* @param current 当前节点
*/
private void recursionFn(List<BillTreeDto> beans, BillTreeDto current) {
List<BillTreeDto> childsList = getChildList(beans, current);
current.setChildsList(childsList);
for (BillTreeDto nextChild : childsList) {
recursionFn(beans, nextChild);
}
}
/**
* 获得指定节点下的所有子节点
* @Title: getChildList
* @Description: 获得指定节点下的所有子节点
* @param beans 所有节点集合
* @param current 当前节点
* @return
*/
private List<BillTreeDto> getChildList(List<BillTreeDto> beans, BillTreeDto current) {
List<BillTreeDto> childsList = new ArrayList<BillTreeDto>();
Iterator<BillTreeDto> it = beans.iterator();
while (it.hasNext()) {
BillTreeDto child = it.next();
if (current.getId().equals(child.getParentId())) {
childsList.add(child);
}
}
return childsList;
}
}