实体父类
@Data public class MenuTreeNode{ @ApiModelProperty(value = "节点ID") private String node; @ApiModelProperty(value = "父节点ID") private String parentNode; @ApiModelProperty(value = "子标签") private List children; }
实体子类
@Data @NoArgsConstructor @AllArgsConstructor public class ResourcePoolDetailVO extends MenuTreeNode{ @ApiModelProperty(value = "流程编号") private String targetId; @ApiModelProperty(value = "科目名称") private String projectName; @ApiModelProperty(value = "对比期数据") private BigDecimal comparevalue; @ApiModelProperty(value = "指标数值") private BigDecimal indicatorValue; @ApiModelProperty(value = "手工调整项") private BigDecimal adjustValue; @ApiModelProperty(value = "调整后数值") private BigDecimal afterAdjustValue; @ApiModelProperty(value = "备注") private String remark; @ApiModelProperty(value = "节点ID") private String node; @ApiModelProperty(value = "父节点ID") private String parentNode; @ApiModelProperty(value = "创建时间,系统时间") private Date createDate; @ApiModelProperty(value = "子标签") private List children; public ResourcePoolDetailVO(ResourcePoolDetailDO srcData){ if(srcData != null) { BeanUtils.copyProperties(srcData, this); } } }
tree工具类
public class MenuTreeUtil {
//建立树形结构
public static List extends MenuTreeNode> buildTree(List extends MenuTreeNode> detailDOS){
List treeMenus =new ArrayList<>();
for(MenuTreeNode menuNode : getRootNode(detailDOS)) {
menuNode=buildChildTree(menuNode,detailDOS);
treeMenus.add(menuNode);
}
return treeMenus;
}
//递归,建立子树形结构
private static MenuTreeNode buildChildTree(MenuTreeNode pNode, List extends MenuTreeNode> detailDOS){
List childMenus =new ArrayList<>();
for(MenuTreeNode menuNode : detailDOS) {
if(menuNode.getParentNode().equals(pNode.getNode())) {
childMenus.add(buildChildTree(menuNode,detailDOS));
}
}
if(CollectionUtils.isNotEmpty(childMenus)){
pNode.setChildren(childMenus);
}
return pNode;
}
//获取根节点
private static List extends MenuTreeNode> getRootNode(List extends MenuTreeNode> detailDOS) {
List rootMenuLists =new ArrayList<>();
for(MenuTreeNode menuNode : detailDOS) {
if(menuNode.getParentNode().equals("0")) {
rootMenuLists.add(menuNode);
}
}
return rootMenuLists;
}
public static List extends MenuTreeNode> convertToObjList(List extends MenuTreeNode> detailDOS){
List treeMenus =new ArrayList<>();
for (MenuTreeNode menuNode : detailDOS) {
if (menuNode.getChildren() != null) {
treeMenus.add(menuNode);
convertToObjList(menuNode.getChildren(), treeMenus);
} else {
treeMenus.add(menuNode);
}
}
return treeMenus;
}
public static void convertToObjList(List extends MenuTreeNode> source ,
List outList){
if(outList==null){
outList = new ArrayList<>();
}
for (MenuTreeNode tTreeStructure : source) {
if (tTreeStructure.getChildren() != null) {
outList.add(tTreeStructure);
convertToObjList(tTreeStructure.getChildren(), outList);
} else {
outList.add(tTreeStructure);
}
}
}
}
将数据转换成树形结构
ListdetailVOS = new ArrayList<>(); List resultVOs = (List ) MenuTreeUtil.buildTree(detailVOS);
将树形结构转换成扁平数据
ListdetailVOS = new ArrayList<>(); List detailVOS = (List ) MenuTreeUtil.convertToObjList(detailVOS);



