java递归语法使用
java递归语法使用
你好! node实体类递归建tree。
node类
@Data
public class TIotSysArea {
private Long id;
private String name;
private String code;
private Integer level;
private Long parentId;
private String cascadeIds;
private String remark;
private String tag;
private Long orgId;
private Integer status;
private Integer isUsed;
private Long managerId;
private String managerName;
private Integer sort;
private Long createTime;
private Long updateTime;
@ApiModelProperty(value = "节点名称")
private String title;
@Transient
@ApiModelProperty(value = "该节点唯一标识")
private String key;
@ApiModelProperty(value = "是否是最后一级节点")
private Boolean isLeaf;
@ApiModelProperty(value = "子级节点集合")
private List<TIotSysArea> children;
@ApiModelProperty(value = "搜索内容")
private String searchContent;
@ApiModelProperty(value = "区域对应的所有父级区域")
private Map<Integer, TIotSysArea> parentMap;
@ApiModelProperty(value = "蜂鸟地图区域元素id")
private Long mapAreaId;
}
使用递归方法建树
*
* @author wsj
* @time 2020-02-11 12:31
**/
public class TreeBuilderOne {
/**
* 使用递归方法建树
* @param treeNodes
* @return
*/
public List<TIotSysArea> buildByRecursive(List<TIotSysArea> treeNodes) {
List<TIotSysArea > trees = new ArrayList<>();
for (TIotSysArea treeNode : treeNodes) {
if (treeNode.getParentId()== -1) {
TIotSysArea children=findChildren(treeNode,treeNodes);
trees.add(children);
}
}
return trees;
}
/**
* 递归查找子节点
* @param treeNodes
* @return
*/
public TIotSysArea findChildren(TIotSysArea treeNode,List<TIotSysArea> treeNodes) {
for (TIotSysArea it : treeNodes) {
if(treeNode.getId().equals(it.getParentId())) {
if (treeNode.getChildren() == null) {
treeNode.setChildren(new ArrayList<>());
}
treeNode.getChildren().add(findChildren(it,treeNodes));
}
}
return treeNode;
}
}