JAVA递归实现树型结构 灰太狼 2022-10-29 06:28 130阅读 0赞 近期项目有个需求,需要将组织机构数据拼成树型结构返回至前端。我的做法如下: 1.由于前端展示使用的组件需要特定的属性key,所以我定义了一个VO对象,代码如下: (本人使用了Lombok插件) package top.yuxuange.vo; import lombok.Data; import java.util.List; @Data public class TreeVO { /** * id */ private String id; /** * title */ private String title; /** * 子级 */ private List<TreeVO> children; } 2.编写树型结构工具类: 这是我数据库中组织机构的根节点CODE的截图 ![1][] package top.yuxuange.util; import org.springframework.stereotype.Component; import top.yuxuange.model.SysDept; import top.yuxuange.vo.TreeVO; import java.util.LinkedList; import java.util.List; import java.util.stream.Collectors; /** * 获取组织机构树 * * @author yuxuange * @Date 2021-02-03 */ @Component public class TreeUtil { /** * 组织机构表,根节点CODE */ private static final String TREE_ROOT_CODE = "0"; /** * 标准版 */ public static List<TreeVO> getTree(List<SysDept> record) { List<TreeVO> treeList = new LinkedList(); for (SysDept sysDept : record) { if (TREE_ROOT_CODE.equals(sysDept.getParentId())) { TreeVO treeVO = new TreeVO(); treeVO.setId(sysDept.getCode()); treeVO.setTitle(sysDept.getName()); treeVO.setChildren(getChild(sysDept.getCode(), record)); treeList.add(treeVO); } } return treeList; } private static List<TreeVO> getChild(String code, List<SysDept> record) { List<TreeVO> childrenList = new LinkedList(); for (SysDept sysDept : record) { if (code.equals(sysDept.getParentId())) { TreeVO treeVO = new TreeVO(); treeVO.setId(sysDept.getCode()); treeVO.setTitle(sysDept.getName()); treeVO.setChildren(getChild(sysDept.getCode(), record)); childrenList.add(treeVO); } } return childrenList; } /** * lamda表达式版 */ public static List<TreeVO> getTreeEX(List<SysDept> record){ return record.stream().filter(sysDept -> {return TREE_ROOT_CODE.equals(sysDept.getParentId());}).map(sysDept -> { TreeVO treeVO = new TreeVO(); treeVO.setId(sysDept.getCode()); treeVO.setTitle(sysDept.getName()); treeVO.setChildren(getChildEX(sysDept.getCode(),record)); return treeVO; }).collect(Collectors.toList()); } private static List<TreeVO> getChildEX(String code,List<SysDept> record){ return record.stream().filter(sysDept -> {return code.equals(sysDept.getParentId());}).map(sysDept -> { TreeVO treeVO = new TreeVO(); treeVO.setId(sysDept.getCode()); treeVO.setTitle(sysDept.getName()); treeVO.setChildren(getChildEX(sysDept.getCode(),record)); return treeVO; }).collect(Collectors.toList()); } } 3.查询数据,调用工具类,返回结果如下: ![treeResult][] [1]: /images/20221024/3633ed6f94c0411dac89a8871b74c2ad.png [treeResult]: /images/20221024/6e99c9674d39413782ecf7462a2c2356.png
还没有评论,来说两句吧...