package com.yc.crm.base.util; import com.yc.crm.base.entity.TreeEntiry; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.List; import java.util.function.Function; public class Utils { /** * 把list数据内容转成树形结构输出 * @param list * @return * @param */ public static List convertToTree(List list, Function getParentIdFunc, Function getIdFunc) { List result = new ArrayList<>(); list.stream().forEach(item -> { if (StringUtils.isBlank(getParentIdFunc.apply(item))) { // 从父节点开始递归处理 result.add(findChildren(item, list, getParentIdFunc, getIdFunc)); } }); return result; } /** * 递归查找子节点 * * @param root 当前节点 * @param list 节点列表 * @param getParentIdFunc 获取父ID的函数 * @param getIdFunc 获取自身ID的函数 * @return 节点 */ private static T findChildren(T root, List list, Function getParentIdFunc, Function getIdFunc) { for (T sub : list) { if (getIdFunc.apply(root).equalsIgnoreCase(getParentIdFunc.apply(sub))) { if (getSubListFunc(root) == null) { setSubListFunc(root, new ArrayList<>()); } getSubListFunc(root).add(findChildren(sub, list, getParentIdFunc, getIdFunc)); } } return root; } private static List getSubListFunc(T node) { // 使用反射或其他方式获取node的children属性 return (List) ((TreeEntiry) node).getSubList(); // 假设YourNodeType是节点对象的类型,‌且有getChildren方法 } private static void setSubListFunc(T node, List children) { // 使用反射或其他方式设置node的children属性 ((TreeEntiry) node).setSubList(children); // 假设YourNodeType是节点对象的类型,‌且有setChildren方法 } }