需求:把具有父子关系的数据组装成树状结构
记录备忘一下。
实现的逻辑不难,不过每次实现都需要花点时间,本人比较懒不想再去思考了。
实体类:
@Data
public class CategoryVo {
/**
* 类别Id
*/
private Integer id;
/**
* 父类别id当id=0时说明是根节点,一级类别
*/
private Integer parentId;
/**
* 子类目
*/
private List<CategoryVo> subCategories;
}
实现逻辑:
public void doWork(List<CategoryVo> voList) {
// 1.找根节点
List<CategoryVo> rootList = voList.stream().filter(
item -> item.getParentId().equals(0)).collect(Collectors.toList());
// 2.找子节点
setSub(rootList, voList);
}
public void setSub(List<CategoryVo> voList, List<CategoryVo> dataList) {
for (CategoryVo root : voList) {
List<CategoryVo> subList = new ArrayList<>();
for (CategoryVo vo : dataList) {
if (root.getId().equals(vo.getParentId())) {
subList.add(vo);
}
}
root.setSubCategories(subList);
setSub(subList, dataList);
}
}