package com.fs.app.utils;
import com.fs.app.vo.CityVO;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName 树形工具类
 **/
public class CityTreeUtil {
    /**
     * 获得指定节点下所有归档
     *
     * @param list
     * @param parentId
     * @return
     */
    public static List<CityVO> list2TreeConverter(List<CityVO> list, int parentId) {
        List<CityVO> returnList = new ArrayList<>();

        for (CityVO res : list) {
            //判断对象是否为根节点

            if (res.getPid() == parentId) {
                //该节点为根节点,开始递归
                //通过递归为节点设置childList
                recursionFn(list, res);
                returnList.add(res);
            }
        }

        return returnList;
    }

    /**
     * 递归列表
     * 通过递归,给指定t节点设置childList
     *
     * @param list
     * @param t
     */
    public static void recursionFn(List<CityVO> list, CityVO t) {
        //只能获取当前t节点的子节点集,并不是所有子节点集
        List<CityVO> childsList = getChildList(list, t);

        if(childsList!=null&&childsList.size()>0){
            //设置他的子集对象集
            t.setChildren(childsList);
        }



        //迭代子集对象集

        //遍历完,则退出递归
        for (CityVO nextChild : childsList) {

            //判断子集对象是否还有子节点
            if (!CollectionUtils.isEmpty(childsList)) {
                //有下一个子节点,继续递归
                recursionFn(list, nextChild);
            }
        }
    }

    /**
     * 获得指定节点下的所有子节点
     *
     * @param list
     * @param t
     * @return
     */
    public static List<CityVO> getChildList(List<CityVO> list, CityVO t) {
        List<CityVO> childsList = new ArrayList<>();
        //遍历集合元素,如果元素的Parentid==指定元素的id,则说明是该元素的子节点
        for (CityVO t1 : list) {
            if (t1.getPid().equals(t.getValue())) {
                childsList.add(t1);
            }
        }

        return childsList;
    }


}
