树形节点
package com.jtkj.kmserver.utils;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* 树形节点
*/
@Data
public class Tree<T> {
/**
* 节点ID
*/
private String id;
/**
* 显示节点文本
*/
private String title;
/**
* 节点详情
*/
private T detail;
/**
* 节点的子节点
*/
private List<Tree<T>> children = new ArrayList<>();
/**
* 父ID
*/
private String parentId;
/**
* 是否有父节点
*/
private boolean hasParent = false;
/**
* 是否有子节点
*/
private boolean hasChildren = false;
}
树形生成工具类
package com.jtkj.kmserver.utils;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.stream.Collectors;
/**
* 树形生成工具
*/
public class TreeUtils {
public interface BuildTree<T>{
/**
* 获取当前项父级的id
* @param item 当前项
* @return 父级id
*/
String getParentId(T item);
/**
* 设置树节点相关属性,必须设置树节点id
* @param tree 树节点
* @param t 数据
*/
void setData(Tree<T> tree,T t);
}
/**
*
* @param parent 调用时传null
* @param All 所有数据
* @param tBuildTree 回调方法
* @param <T>
* @return
*/
public static <T> List<Tree<T>> buildTree(Tree<T> parent, List<T> All, BuildTree<T> tBuildTree){
List<Tree<T>> collect = All.stream()
.filter(item1 -> parent ==null? !StringUtils.hasLength(tBuildTree.getParentId(item1)): parent.getId().equals(tBuildTree.getParentId(item1)))
.map(item -> {
Tree<T> tree = new Tree<>();
tree.setDetail(item);
tBuildTree.setData(tree,item);
if(parent == null){
tree.setHasParent(false);
}else {
tree.setHasParent(true);
tree.setParentId(parent.getId());
}
List<Tree<T>> child = buildTree(tree, All,tBuildTree);
tree.setChildren(child);
tree.setHasChildren(child!=null && child.size()>0);
return tree;
})
.collect(Collectors.toList());
return collect;
}
}
调用树形生成工具类,生成树形列表
@Service
public class TOrganizationalstructureServiceImpl extends ServiceImpl<TOrganizationalstructureMapper, TOrganizationalstructure> implements ITOrganizationalstructureService {
@Override
public List<Tree<TOrganizationalstructure>> listWithTree(String itemId) {
QueryWrapper<TOrganizationalstructure> wrapper = Wrappers.query();
wrapper.eq("teamId", itemId);
List<TOrganizationalstructure> list = baseMapper.selectList(wrapper);
List<Tree<TOrganizationalstructure>> collect = TreeUtils.buildTree(null, list, new TreeUtils.BuildTree<TOrganizationalstructure>() {
@Override
public String getParentId(TOrganizationalstructure tOrganizationalstructure) {
return tOrganizationalstructure.getSuperior();
}
@Override
public void setData(Tree<TOrganizationalstructure> tree,TOrganizationalstructure item) {
tree.setId(item.getOnlyId());
tree.setTitle(item.getDepartmentName());
}
});
return collect;
}
}
数据结构
查询结果