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

传入所有节点,返回树

实体类

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

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

方法

public List<ProvinceCityInfo> buildRootProvince(List<ProvinceCityInfo> all) {
  // pid 为空, 代表他是根节点
  List<ProvinceCityInfo> 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;
}

 

posted @   得好好活  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
点击右上角即可分享
微信分享提示