如何用最简单的方式建一棵树返回


传入所有节点,返回树

实体类

public class ProvinceCityInfo implements Serializable {
    
    private Integer id;
    /**
    * 名字
    */
    private String name;
    /**
    * 父id
    */
    private Integer pid;
    /**
    * 详情信息
    */
    private String descInfo;

    // 子集城市
    private List children = new ArrayList<>();
    
    get、set...
}

方法

public List buildRootProvince(List all) {
  // pid 为空, 代表他是根节点
  List collect = allProvince.stream().filter(o1 -> o1.getPid() == null).collect(Collectors.toList());
  this.rootProvince = collect;
  //为每一个节点找它父节点
  for (ProvinceCityInfo childInfo : allProvince) {
    // 1.如果pid为空,代表是根节点,不用找了
    if (childInfo.getPid() == null) {
      continue;
    }
    // 2.遍历去找,只要找到了父节点,就放到这个父节点下
    for (ProvinceCityInfo parentInfo : allProvince) {
      if (parentInfo.getId() == childInfo.getPid()) {
        parentInfo.getChildren().add(childInfo);
        break;
      }
    }
  }
  return collect;
}

相关