天天看點

List集合資料轉換成Trees樹狀結構資料

實體類

@Data
public class LeaveType 
{

    /** 主鍵 */
    private Integer typeId;

    /** 父級ID */
    private Integer parentId;

    /** 類型名稱 */
    private String typeName;

    /**
     * 是否存在下級
     */
    private boolean insertStatus;

    /**
     * 存放二級類資料
     */
    private List<LeaveType> children;
    }
           

List集合資料轉樹狀結構

/**
     * 使用遞歸方法建樹
     *
     * @param LeaveTypes
     * @return
     */
    public static List<LeaveType> trees(List<LeaveType> list) {
        List<LeaveType> trees = new ArrayList<LeaveType>();
        for (LeaveType leaveType : list) {//0代表頂級架構
            if (0 == (leaveType.getParentId())) {
                trees.add(findChildren(leaveType, list));
            }
        }
        return trees;
    }

/**
     * 遞歸查找子節點
     *
     * @param LeaveTypes
     * @return
     */
    public static LeaveType findChildren(LeaveType LeaveType, List<LeaveType> list) {
        for (LeaveType type : list) {
            if (LeaveType.getTypeId() == (type.getParentId())) {
                type.setInsertStatus(false);
                LeaveType.setInsertStatus(true);
                if (StringUtils.isEmpty(LeaveType.getChildren())) {
                    LeaveType.setChildren(new ArrayList<LeaveType>());
                }
                LeaveType.getChildren().add(findChildren(type, list));
            }
        }
        return LeaveType;
    }