自定义树形构造器
叶子节点
import java.util.List;/*** TODO** @author libinWang* @className TreeNode* @date 2025/8/25*/
public interface TreeNode<K> {K getId();K getParentId();List<? extends TreeNode<K>> getChildren();void setChildren(List<? extends TreeNode<K>> children);}
构造器
import java.util.*;public class TreeBuilder {/*** 通用树形结构构建方法(适用于实现了TreeNode接口的类)* @param list 原始数据列表* @param <T> 节点类型* @param <K> ID类型* @return 树形结构列表*/public static <T extends TreeNode<K>, K> List<T> buildTree(List<T> list) {if (list == null || list.isEmpty()) {return Collections.emptyList();}Map<K, T> map = new HashMap<>();for (T item : list) {map.put(item.getId(), item);}List<T> roots = new ArrayList<>();for (T item : list) {T parent = map.get(item.getParentId());if (parent == null) {roots.add(item);} else {List<T> children = (List<T>) parent.getChildren();if (children == null) {children = new ArrayList<>();parent.setChildren(children);}children.add(item);}}return roots;}
}
使用
@Data
public class DeptVo implements TreeNode {/*** id*/@JsonSerialize(using = ToStringSerializer.class)private Long id;/*** 父级ID(指向本表id,根节点为NULL)*/private Long parentId;/*** 子集*/private List<DeptVo> deptVoList; @Overridepublic List<? extends TreeNode> getChildren() {return this.getDeptVoList();}@Overridepublic void setChildren(List children) {this.setDeptVoList(children);}
}
List<PostVo> copys= TreeBuilder.buildTree(copys);