個人常用工具類:JAVA樹形結構工具類01


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;
    }
 
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM