package com.example.mindsa.util.tree;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import lombok.SneakyThrows;
import java.lang.invoke.SerializedLambda;
import java.lang.reflect.Method;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* 树形工具类-函数版
*
* @author sunziwen
*/
public class TreeUtil {
/**
* @param list 树结构的基础数据集
* @param getIdFn 获取主键的函数
* @param getParentIdFn 获取父节点的函数
* @param getChildrenFn 获取子集的函数
* @param t
* @param r
* @return t
*/
@SneakyThrows
public static List treeOut(List list, Function getIdFn, Function getParentIdFn, SFunction getChildrenFn) {
/*所有元素的Id*/
List
public static void main(String[] args) {
//模拟数据
ArrayList list = new ArrayList() {
{
add(new My("1", "-1", "a"));
add(new My("2", "-1", "aa"));
add(new My("3", "1", "b"));
add(new My("4", "1", "c"));
add(new My("5", "3", "d"));
add(new My("6", "5", "e"));
add(new My("7", "6", "f"));
add(new My("8", "2", "g"));
add(new My("9", "8", "h"));
add(new My("10", "9", "i"));
}};
//使用工具类:
List result = TreeUtil.treeOut(list, My::getUserid, My::getPId, My::getChs);
//打印
System.out.println(JSON.toJSONString(result));
}