package com.app.util;

import com.app.dto.platform.ResponseNodeDto;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class NodeUtils {

    /**
     * 构建节点树
     * @param nodeList 需要构建的所有节点
     * @return 节点树
     */
    public static List<ResponseNodeDto> buildTree(List<ResponseNodeDto> nodeList){
        // 先得到所有子节点
        // 先过滤出有父节点的节点，再根据父节点id作为key把节点放入map中
        Map<String, List<ResponseNodeDto>> sub = nodeList.stream().filter(node -> node.getParentId() != null).collect(Collectors.groupingBy(ResponseNodeDto::getParentId));
        // 将子节点放入父节点的children中
        // 循环每个节点，并把对应子节点放入children中
        nodeList.forEach(node -> node.setChildren(sub.get(node.getValue())));
        // 构建顶级节点，并返回树
        return nodeList.stream().filter(node -> node.getParentId() == null).collect(Collectors.toList());
    }
}
