TreeUtil(树形结构转换)
1、Entity(实体类)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RegionTree {
//id
private String id;
//父节点id
private String parentId;
//子节点
private List<RegionTree> children;
}
2、TreeUtils
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class TreeUtil {
/**
* 创建树结构
*
* @param regionTrees 树形结构list
* @return treeList
*/
public static List<RegionTree> tree(List<RegionTree> regionTrees) {
//返回的节点树
List<RegionTree> rootNodes = new ArrayList<>();
Iterator<RegionTree> it = regionTrees.iterator();
while (it.hasNext()) {
RegionTree next = it.next();
//parent(上级Id)为0的是根节点
if (StringUtils.isEmpty(next.getParentId())) {
rootNodes.add(next);
it.remove();
}
}
//遍历,找到二级节点
for (RegionTree regionTree : rootNodes) {
List<RegionTree> child = getChild(regionTrees, regionTree.getId().toString());
regionTree.setChildren(child);
}
return rootNodes;
}
/**
* 查子节点
*
* @param regions 树结构对象
* @param parentId 父id
* @return treeList
*/
private static List<RegionTree> getChild(List<RegionTree> regions, String parentId) {
//子节点列表
List<RegionTree> childList = new ArrayList<>();
Iterator<RegionTree> it = regions.iterator();
while (it.hasNext()) {
RegionTree regionTree = it.next();
if (parentId.equals(regionTree.getParentId())) {
childList.add(regionTree);
it.remove();
}
}
//遍历 递归获取子节点的子节点
for (RegionTree regionTree : childList) {
List<RegionTree> child = getChild(regions, regionTree.getId().toString());
regionTree.setChildren(child);
}
//递归出口 childList长度为0
if (childList.size() == 0) {
return new ArrayList<>();
}
return childList;
}
}
3、Test
public class TestTreeUtils {
public static void main(String[] args) {
List<RegionTree> list = new ArrayList<>();
RegionTree m1 = new RegionTree("1", null, null);
RegionTree m2 = new RegionTree("2", "1", null);
RegionTree m3 = new RegionTree("3", "2", null);
RegionTree m4 = new RegionTree("4", "3", null);
RegionTree m5 = new RegionTree("5", "3", null);
list.add(m1);
list.add(m2);
list.add(m3);
list.add(m4);
list.add(m5);
RegionTree m11 = new RegionTree("6", null, null);
RegionTree m12 = new RegionTree("7", "6", null);
RegionTree m13 = new RegionTree("8", "7", null);
RegionTree m14 = new RegionTree("9", "8", null);
RegionTree m15 = new RegionTree("10", "8", null);
list.add(m15);
list.add(m11);
list.add(m12);
list.add(m13);
list.add(m14);
List<RegionTree> regionTreeTree = TreeUtil.tree(list);
System.out.println(regionTreeTree);
}
}
博客介绍了Java中树结构相关内容,包含Entity实体类、TreeUtils以及Test,转载自https://www.jianshu.com/p/fabedd4d2884 ,涉及列表、链表等信息技术知识。
1938

被折叠的 条评论
为什么被折叠?



