欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java树形结构组装工具类

程序员文章站 2022-06-25 20:26:38
...
import java.util.ArrayList;
import java.util.List;

import lombok.Data;

@Data
public class BillTreeDto {
  /**
   * 当前节点id
   */
  private String id;

  /**
   * 父节点id
   */
  private String parentId;

  /**
   * 名称
   */
  private String name;

  private List<BillTreeDto> childsList = new ArrayList<BillTreeDto>();
}
package com.ufgov.pvdf.util;

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

import com.ufgov.pvdf.billparse.dto.BillTreeDto;

public class TreeUtil {

  public List<BillTreeDto> getTreeData(List<BillTreeDto> list) {
    List<BillTreeDto> returnList = new ArrayList<BillTreeDto>();
    for (Iterator<BillTreeDto> iterator = list.iterator(); iterator.hasNext();) {
      BillTreeDto res = iterator.next();
      //判断是否为第一个节点:parentId为空
      if (StringUtil.isEmptyString(res.getParentId())) {
        recursionFn(list, res);
        returnList.add(res);
      }
    }
    return returnList;
  }

  /**
   * 递归寻找子节点
   * @Title: recursionFn     
   * @Description: 递归寻找子节点    
   * @param beans 所有节点
   * @param current 当前节点    
   */
  private void recursionFn(List<BillTreeDto> beans, BillTreeDto current) {
    List<BillTreeDto> childsList = getChildList(beans, current);
    current.setChildsList(childsList);
    for (BillTreeDto nextChild : childsList) {
      recursionFn(beans, nextChild);
    }
  }

  /**
   * 获得指定节点下的所有子节点
   * @Title: getChildList     
   * @Description: 获得指定节点下的所有子节点    
   * @param beans 所有节点集合
   * @param current 当前节点
   * @return       
   */
  private List<BillTreeDto> getChildList(List<BillTreeDto> beans, BillTreeDto current) {
    List<BillTreeDto> childsList = new ArrayList<BillTreeDto>();
    Iterator<BillTreeDto> it = beans.iterator();
    while (it.hasNext()) {
      BillTreeDto child = it.next();
      if (current.getId().equals(child.getParentId())) {
        childsList.add(child);
      }
    }
    return childsList;
  }

}
相关标签: java开发