public class TreeUtils {
public static <T extends TreeNode> List<T> buildTreeNodes(List<T> listTreeNode, Long parentId) {
List<T> distinctList = listTreeNode.stream().distinct().collect(Collectors.toList());
List<T> listTreeNode_ = new ArrayList<>();
for (T node : distinctList) {
if (node.getParentId().equals(parentId)) {
listTreeNode_.add(node);
}
}
recursionMenuTree(listTreeNode, listTreeNode_);
return listTreeNode_;
}
private static void recursionMenuTree(List<? extends TreeNode> listTreeNode, List<? extends TreeNode> listSubTreeNode) {
for (TreeNode subNode : listSubTreeNode) {
for (TreeNode node : listTreeNode) {
if (subNode.getId().equals(node.getParentId())) {
if (CollectionUtils.isEmpty(subNode.getChildren())) {
subNode.setChildren(new ArrayList<>());
}
if (subNode.getChildren().contains(node)) {
continue;
}
subNode.getChildren().add(node);
recursionMenuTree(listTreeNode, subNode.getChildren());
}
}
}
}
}
public class TreeNode {
protected Long id;
@ApiModelProperty("父級節點")
protected Long parentId;
public List<TreeNode> children;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getParentId() {
return parentId;
}
public void setParentId(Long parentId) {
this.parentId = parentId;
}
public List<TreeNode> getChildren() {
return children;
}
public void setChildren(List<TreeNode> children) {
this.children = children;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
TreeNode treeNode = (TreeNode) o;
return id != null ? id.equals(treeNode.id) : treeNode.id == null;
}
@Override
public int hashCode() {
return id != null ? id.hashCode() : 0;
}
}