import com.yeyoo.government.server.open.common.domain.TreeDemo;
import lombok.Data;
import org.springframework.util.CollectionUtils;
import javax.swing.tree.TreeModel;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class TreeUtil {
public static List> tree(List extends TreeUtil.TreeModel> list){
//存储根节点的菜单,即一级菜单
List models =new ArrayList<>();
//遍历所有数据,找到根节点菜单
for (TreeUtil.TreeModel item: list) {
if(StringUtils.equals("0", item.getParentCode())){
//找到根节点菜单的时候,寻找这个根节点菜单下的子节点菜单。
findChilds(item, list);
//添加到根节点的列表中
models.add(item);
}
}
return models;
}
private static void findChilds(TreeModel root, List extends TreeUtil.TreeModel> list){
List childlist=new ArrayList<>();
//遍历所有数据,找到是入参父节点的子节点的数据,然后加到childlist集合中。
for (TreeUtil.TreeModel menu : list) {
if (root.getCode().equals(menu.getParentCode())){
childlist.add(menu);
}
}
if (CollectionUtils.isEmpty(root.getChildren())) {
//若子节点不存在,那么就不必再遍历子节点中的子节点了 直接返回。
if(childlist.size()==0) {
return;
}
//排序
childlist.sort(Comparator.comparing(TreeUtil.TreeModel::getSort));
//设置父节点的子节点列表
root.setChildren(childlist);
}
//若子节点存在,接着递归调用该方法,寻找子节点的子节点。
for (TreeUtil.TreeModel childs : root.getChildren()) {
findChilds(childs, list);
}
}
@Data
public static class TreeModel {
private String parentCode;
private String code;
private Integer sort;
private List extends TreeUtil.TreeModel> children;
}
public static void main(String[] args) {
List list = new ArrayList<>();
list.add(new TreeDemo(1, "tom", "0", "1", 1));
list.add(new TreeDemo(2, "jack", "1", "2", 1));
list.add(new TreeDemo(3, "rose", "1", "3", 2));
List treeModels = TreeUtil.tree(list);
System.out.println(treeModels.toString());
}
}