java 使用递归算法快速封装树形结构
一、创建实体类
@Data
@ToString
public class CatalogVO {
private Integer id;
private Integer panelsId;
private String catalogName;
private Integer parentId;
private Integer isDeleted;
private String createdUser;
private Date createdTime;
List chirldren = new ArrayList<>();
}
创建一个实体类CatalogVO,在实体类中创建一个List 对象,用它来存储chirldren(子节点),并且引入自身作为泛型。
二、数据库设计

通过数据库结构可以看出,这里我只是简单的使用parent_id 和 id 进行层级关联。
三、service层
从数据库读取数据,然后使用递归算法将原始数据进行重新封装。
/** * 获取文档目录的树形结构 * @param panelsId * @return */ @Override public List<CatalogVO> getDetailTree(int panelsId) { QueryWrapper<FileCatalog> wrapper = new QueryWrapper<>(); wrapper.eq("panels_id", panelsId); List<FileCatalog> fileCatalogs = fileCatalogMapper.selectList(wrapper); List<CatalogVO> lists = new ArrayList<>(); for (FileCatalog fileCatalog : fileCatalogs) { CatalogVO vo = new CatalogVO(); try { BeanUtils.copyProperties(vo,fileCatalog); lists.add(vo); } catch (IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } } List<CatalogVO> tree = createTree(lists, 0); return tree; } /** * 递归建立树形结构 (算法) * @param lists * @param pid * @return */ private List<CatalogVO> createTree(List<CatalogVO> lists, int pid) { List<CatalogVO> tree = new ArrayList<>(); for (CatalogVO catelog : lists) { if (catelog.getParentId() == pid) { catelog.setChirldren(createTree(lists,catelog.getId())); tree.add(catelog); } } return tree; }
四、前台请求资源

没有停止的脚步,只有倒下去的脚步

浙公网安备 33010602011771号