1.递归对象
/**
* @author xiaosai
* @version 1.0.0
* @date 2024/5/24 09:29
* @describe
* @className
*/
@Data
@ToString
public class RecursionResp {
private String id;
/* 父级字典 */
private String parentId;
/* 编码 */
private String code;
/* 名称 */
private String name;
private List<RecursionResp> children;
}
2.单个根节点递归查找
/**
* 递归查找
*
* @param recursionRespList 数据集合
* @param parent 父节点
*/
private void addSubItem(List<RecursionResp> recursionRespList, RecursionResp parent) {
for (RecursionResp recursionResp : recursionRespList) {
if (Objects.nonNull(recursionResp.getParentId()) && recursionResp.getParentId().equals(parent.getId())) {
if (Objects.isNull(parent.getChildren())) {
parent.setChildren(new ArrayList<>());
}
parent.getChildren().add(recursionResp);
addSubItem(recursionRespList, recursionResp);
}
}
}
3.数据结构重组
@PostMapping("get")
@TenantTokenAnn
public ResultResp<List<RecursionResp>> get() {
List<DictEntity> dictEntities = dictService.list();
List<RecursionResp> recursionRespList = ConvertUtils.convert(dictEntities, RecursionResp.class);
List<RecursionResp> rootList = recursionRespList.stream().filter(recursionResp -> StringUtils.isEmpty(recursionResp.getParentId())).collect(Collectors.toList());
for (RecursionResp recursionResp : rootList) {
addSubItem(recursionRespList, recursionResp);
}
return ResultResp.success(rootList);
}