import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * 构架树结构树形json * @author Administrator */ public class TreeUtil<T> { //方式一,1 /** * 根据pid,构建树节点 */ public static <T extends TreeNode> List<T> build(List<T> treeNodes, Integer pid) { List<T> treeList = new ArrayList<>(); for(T treeNode : treeNodes) { if (pid.equals(treeNode.getParentId())) { treeList.add(findChildren(treeNodes, treeNode)); } } return treeList; }
//方式一,2 /** * 查找子节点 */ private static <T extends TreeNode> T findChildren(List<T> treeNodes, T rootNode) { for(T treeNode : treeNodes) { if(rootNode.getId().equals(treeNode.getParentId())) { rootNode.getChildren().add(findChildren(treeNodes, treeNode)); } } return rootNode; } //方式二 /** * 构建树节点 */ public static <T extends TreeNode> List<T> build(List<T> treeNodes) { List<T> result = new ArrayList<>(); //list转map Map<Integer, T> nodeMap = new LinkedHashMap<>(treeNodes.size()); for(T treeNode : treeNodes){ nodeMap.put(treeNode.getId(), treeNode); } for(T node : nodeMap.values()) { T parent = nodeMap.get(node.getParentId()); if(parent != null && !(node.getId().equals(parent.getId()))){ parent.getChildren().add(node); continue; } result.add(node); } return result; } }
List<TreeNode> convert = ObjectCopyUtils.convert(list, TreeNode.class); List<TreeNode> build = TreeUtil.build(convert);
import com.google.common.collect.Lists; import lombok.Data; import java.util.Date; import java.util.List; /** * @author Administrator */ @Data public class TreeNode { //主键 private Integer id; //空间名称 private String spaceName; //父id private Integer parentId; //创建人 private Long createId; //排序,数字越小越靠前 private Integer spaceSort; //创建时间 private Date createTime; private List<TreeNode> children = Lists.newArrayList(); }