基本结构
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ListTreeImpl {
//编号
private Integer idx;
//当前主键
private String id;
//上级主键
private String pid;
//子集集合
private List<ListTreeImpl> children;
}
使用递归方式,获取根节点
//获取树的根节点
public static List<ListTreeImpl> getTreeRoot(ArrayList<ListTreeImpl> list) {
ArrayList<ListTreeImpl> trees = new ArrayList<>();
// 获取树的根节点
for (ListTreeImpl tree : list) {
String p = tree.getPid();
boolean flag = false;
for (ListTreeImpl tree1 : list) {
// 循环判断当前是否在这个集合中有父节点
if (tree1.getId() == null && p == null || tree1.getId().equals(p)) {
flag = true;
break;
}
}
if (!flag) {
trees.add(tree);
}
}
return trees;
}
递归实现树
//递归判断实现树结构
public static void getTreesByRecursive(List<ListTreeImpl> trees, ArrayList<ListTreeImpl> list) {
for (ListTreeImpl tree : trees) {
String id = tree.getId();
String pid = tree.getPid();
List<ListTreeImpl> listTreeImpls = new ArrayList<>();
for (ListTreeImpl listTreeImpl : list) {
String pid1 = listTreeImpl.getPid();
String id1 = listTreeImpl.getId();
if (pid1 == null && pid == null || pid1 != null && pid1.equals(id)) {
if (!(id == null && id1 == null || id.equals(id1))) {
listTreeImpls.add(listTreeImpl);
}
}
}
tree.setChildren(listTreeImpls);
getTreesByRecursive(tree.getChildren(), list);
}
}
不使用递归方式1-获取每一个分层
//获得分层的树(同一层的放一起)
public static ArrayList<List<ListTreeImpl>> stratifying(ArrayList<ListTreeImpl> list) {
ArrayList<List<ListTreeImpl>> arrayList = new ArrayList();
if (list != null && list.size() > 0) {
while (list.size() > 0) {
List<ListTreeImpl> listTreeImpls = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
boolean flag = true;
for (int i1 = 0; i1 < list.size(); i1++) {
ListTreeImpl externalTree = list.get(i);
ListTreeImpl innerTree = list.get(i1);
String externalTreePid = externalTree.getPid();
String innerTreePid = innerTree.getPid();
String innerTreeId = innerTree.getId();
if (!(externalTreePid == null && innerTreePid == null || externalTreePid != null && externalTreePid.equals(innerTreePid))) {
if (externalTreePid != null && externalTreePid.equals(innerTreeId)) {
flag = false;
break;
}
}
}
if (flag) {
listTreeImpls.add(list.get(i));
}
}
arrayList.add(listTreeImpls);
list.removeAll(listTreeImpls);
}
}
return arrayList;
}
将分层结构弄成树
//将分层的list的下级放入本级的children中
public static List<ListTreeImpl> getTreeNo