1. Define a table, it must has id, and pid( parentID) it is used to build parent and children relationships.
for example:
2. create a java api for treelist
public List<BimQuotationVO> getTreeList(String id) {
LambdaQueryWrapper<BimQuotation> queryWrapper = new QueryWrapper<BimQuotation>().lambda();
queryWrapper.eq(BimQuotation::getIsDelete, false);
// .eq(StringUtils.isNotBlank(id), BimQuotation::getPid, id)
// .and(StringUtils.isBlank(id), wrapper-> wrapper.isNull(BimQuotation::getPid).or().eq(BimQuotation::getPid, ""))
if (StringUtils.isNotBlank(id)) {
queryWrapper.eq(StringUtils.isNotBlank(id), BimQuotation::getPid, id)
.eq(BimQuotation::getIsDelete, false);
}
List<BimQuotation> quotations = getBaseMapper().selectList(queryWrapper);
List<BimQuotationVO> quotationVOList = quotations.stream().map(quotation -> this.transform(quotation)).collect(Collectors.toList());
// retrieve parent node
return quotationVOList.stream().filter(q -> StringUtils.isBlank(q.getPid())).map(m -> {
m.setChildren(getChildrenList(m, quotationVOList));
return m;
}).collect(Collectors.toList());
}
3. the recursive function: getChildrenList as below:
private List<BimQuotationVO> getChildrenList(BimQuotationVO root, List<BimQuotationVO> quotationVOList) {
return quotationVOList.stream().filter(m -> Objects.equals(m.getPid(), root.getId())).map(m -> {
m.setChildren(getChildrenList(m, quotationVOList));
return m;
}).collect(Collectors.toList());
}
in the front end as bewlow results