import com.alibaba.fastjson2.JSON; import lombok.Data; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; @Data public class PeopleVO { private Integer id; private String peopleName; private Integer parentId; List children = new ArrayList(); //生成树 private static List createTree(List lists, int pid) { List tree = new ArrayList(); for (PeopleVO people : lists) { if (pid == people.getParentId()) { tree.add(people); } } for (PeopleVO people : tree) { people.setChildren(createTree(lists, people.getId())); } return tree; } //从根节点出发到目标节点的路径,按列表顺序排列 private static List searchPeople(List tree, String name) { List result = new ArrayList(); for (PeopleVO people : tree) { if (people.getPeopleName().equals(name)) { result.add(people); return result; } List children = people.getChildren(); if (children != null && children.size() > 0) { List searchResult = searchPeople(children, name); if (searchResult.size() > 0) { result.add(people); result.addAll(searchResult); return result; } } } return result; } //顺序组装节点,搜索结果方法已经是排好序的节点了 private static List createTree2(List nodeList) { List tree = new ArrayList(); for (int i = 0; i nodeChildren = new ArrayList(); nodeChildren.add(sonNode); node.setChildren(nodeChildren); }else{ node.setChildren(null); } } tree.add(nodeList.get(0)); return tree; } public static void main(String[] args) { //三国 PeopleVO sanGuo = new PeopleVO(); sanGuo.setId(0); sanGuo.setParentId(-1); sanGuo.setPeopleName("三国"); //刘备 PeopleVO liuBei = new PeopleVO(); liuBei.setParentId(0); liuBei.setId(1); liuBei.setPeopleName("刘备"); //刘焉 PeopleVO liuYan = new PeopleVO(); liuYan.setParentId(0); liuYan.setId(2); liuYan.setPeopleName("刘焉"); //孙坚 PeopleVO sunJian = new PeopleVO(); sunJian.setParentId(0); sunJian.setId(3); sunJian.setPeopleName("孙坚"); //曹操 PeopleVO caoCao = new PeopleVO(); caoCao.setParentId(0); caoCao.setId(4); caoCao.setPeopleName("曹操"); //刘备的儿子们 //刘封 PeopleVO liuFeng = new PeopleVO(); liuFeng.setParentId(1); liuFeng.setId(5); liuFeng.setPeopleName("刘封"); //刘禅 PeopleVO liuShan = new PeopleVO(); liuShan.setParentId(1); liuShan.setId(6); liuShan.setPeopleName("刘禅"); //刘焉的儿子们 //刘璋 PeopleVO liuZhang = new PeopleVO(); liuZhang.setParentId(2); liuZhang.setId(7); liuZhang.setPeopleName("刘璋"); //刘循是刘璋的儿子 PeopleVO liuXun = new PeopleVO(); liuXun.setParentId(7); liuXun.setId(8); liuXun.setPeopleName("刘循"); //孙坚的儿子们 //孙策 PeopleVO sunCe = new PeopleVO(); sunCe.setParentId(3); sunCe.setId(9); sunCe.setPeopleName("孙策"); //孙权 PeopleVO sunQuan = new PeopleVO(); sunQuan.setParentId(3); sunQuan.setId(10); sunQuan.setPeopleName("孙权"); //曹操的儿子们 //曹丕 PeopleVO caoPi = new PeopleVO(); caoPi.setParentId(4); caoPi.setId(11); caoPi.setPeopleName("曹丕"); //曹植 PeopleVO caoZhi = new PeopleVO(); caoZhi.setParentId(4); caoZhi.setId(12); caoZhi.setPeopleName("曹植"); //曹彰 PeopleVO caoZhang = new PeopleVO(); caoZhang.setParentId(4); caoZhang.setId(13); caoZhang.setPeopleName("曹彰"); //秦朗 PeopleVO qinLang = new PeopleVO(); qinLang.setParentId(4); qinLang.setId(14); qinLang.setPeopleName("秦朗"); //每个人都添加自己的儿子列表 sanGuo.setChildren(Arrays.asList(liuBei, liuYan, sunJian, caoCao)); liuBei.setChildren(Arrays.asList(liuFeng, liuShan)); liuYan.setChildren(Collections.singletonList(liuZhang)); liuZhang.setChildren(Collections.singletonList(liuXun)); sunJian.setChildren(Arrays.asList(sunCe, sunQuan)); caoCao.setChildren(Arrays.asList(caoPi, caoZhi, caoZhang, qinLang)); //将所有人添加到一个集合中 List totalList = new ArrayList(Arrays.asList(sanGuo, liuBei, liuYan, sunJian, caoCao, liuFeng, liuShan, liuZhang, liuXun, sunCe, sunQuan, caoPi, caoZhi, caoZhang, qinLang)); //调用方法生成树 List tree = createTree(totalList, -1); //调用方法搜索 List searchResult = searchPeople(tree, "孙坚"); List resultTree = createTree2(searchResult); System.out.println(JSON.toJSONString(resultTree)); //秦朗的 //[{"children":[{"children":[{"id":14,"parentId":4,"peopleName":"秦朗"}],"id":4,"parentId":0,"peopleName":"曹操"}],"id":0,"parentId":-1,"peopleName":"三国"}] //孙坚的 //[{"children":[{"id":3,"parentId":0,"peopleName":"孙坚"}],"id":0,"parentId":-1,"peopleName":"三国"}] } }