码迷,mamicode.com
首页 > 编程语言 > 详细

个人常用工具类:JAVA树形结构工具类01

时间:2019-07-18 13:48:01      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:frame   name   常用   empty   通过   vat   dsl   迭代   getc   

JAVA树形结构工具类

BaseTreeObj.java

/**
 * 基层树形结构实体类
 * 必备属性:id,parentId,childsList
 */
@Data
public class BaseTreeObj implements Serializable {
    private static final long serialVersionUID = 1L;
    private String id;
    private String parentId;
    private String name;
    private List<BaseTreeObj> childsList = new ArrayList<>();
}

TreeUtil.java

import org.springframework.util.CollectionUtils;
 
import java.util.ArrayList;
import java.util.List;
 
/**
 * 获得树形结构的工具类
 * 实际使用,可将BaseTreeObj直接覆盖为指定类
 */
public class TreeUtil {
 
    /**
     * 获得指定节点下所有归档
     * @param list
     * @param parentId
     * @return
     */
    public static List<BaseTreeObj> list2TreeConverter(List<BaseTreeObj> list, String parentId) {
        List<BaseTreeObj> returnList = new ArrayList<>();
 
        for (BaseTreeObj res : list) {
            //判断对象是否为根节点
            if (res.getParentId().equals(parentId)) {
                //该节点为根节点,开始递归
                recursionFn(list, res); //通过递归为节点设置childList
 
                returnList.add(res);
            }
        }
 
        return returnList;
    }
 
    /**
     * 递归列表
     * 通过递归,给指定t节点设置childList
     * @param list
     * @param t
     */
    public static void recursionFn(List<BaseTreeObj> list, BaseTreeObj t) {
        //只能获取当前t节点的子节点集,并不是所有子节点集
        List<BaseTreeObj> childsList = getChildList(list, t);
        //设置他的子集对象集
        t.setChildsList(childsList);
 
        //迭代子集对象集
        for (BaseTreeObj nextChild : childsList) { //遍历完,则退出递归
 
            //判断子集对象是否还有子节点
            if (!CollectionUtils.isEmpty(childsList)) {
                //有下一个子节点,继续递归
                recursionFn(list, nextChild);
            }
        }
    }   /**
     * 获得指定节点下的所有子节点
     * @param list
     * @param t
     * @return
     */
    public static List<BaseTreeObj> getChildList(List<BaseTreeObj> list, BaseTreeObj t) {
        List<BaseTreeObj> childsList = new ArrayList<BaseTreeObj>();
        //遍历集合元素,如果元素的Parentid==指定元素的id,则说明是该元素的子节点
        for (BaseTreeObj t1 : list) {
            if (t1.getParentId() .equals(t.getId()) ) {
                childsList.add(t1);
            }
        }
 
        return childsList;
    }   /**
     * 判断是否还有下一个子节点
     * @param list
     * @param t
     */
    public static boolean hasChild(List<BaseTreeObj> list, BaseTreeObj t) {
        return getChildList(list, t).size() > 0 ? true : false;
    }
 
}

个人常用工具类:JAVA树形结构工具类01

标签:frame   name   常用   empty   通过   vat   dsl   迭代   getc   

原文地址:https://www.cnblogs.com/jiang4yu/p/11206613.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!