使用递归生成树结构方法
1.在知道顶级的情况下(下面是知道顶级的例子,顶级的父级id = “”)
实体
@Data
@ApiModel("设备模板树vo")
public class EquipmentTemplateTreeVo {
@ApiModelProperty("主键id")
private String fldGuid;
@ApiModelProperty("父级id")
private String fldPGuid;
@ApiModelProperty("名称")
private String fldName;
@ApiModelProperty("序号")
private Integer fldOrder;
@ApiModelProperty("是否删除 0 可用 2 停用")
private Integer fldIsDel;
@ApiModelProperty("类型 (1:分类 0:系统 2:设备)")
private Integer fldType;
@ApiModelProperty("备注说明")
private String fldDesc;
@ApiModelProperty("最后修改")
private String fldModifyDate;
@ApiModelProperty("枝叶,子集")
private List<EquipmentTemplateTreeVo> children;
}
方法
public static List<EquipmentTemplateTreeVo> assemblyTree(List<EquipmentTemplateTreeVo> vos){
List<EquipmentTemplateTreeVo> dd = new ArrayList<>();
List<EquipmentTemplateTreeVo> zy = new ArrayList<>();
for (EquipmentTemplateTreeVo vo : vos) {
if ("".equals(vo.getFldPGuid())){
dd.add(vo);
}else {
zy.add(vo);
}
}
dd = assemblyTree(dd,zy);
return dd;
}
public static List<EquipmentTemplateTreeVo> assemblyTree(List<EquipmentTemplateTreeVo> dd,List<EquipmentTemplateTreeVo> zy){
Map<String, List<EquipmentTemplateTreeVo>> zyMap = zy.stream().collect(Collectors.groupingBy(a -> a.getFldPGuid()));
for (EquipmentTemplateTreeVo d : dd) {
List<EquipmentTemplateTreeVo> equipmentTemplateTreeVos = zyMap.get(d.getFldGuid());
if (null != equipmentTemplateTreeVos && equipmentTemplateTreeVos.size() != 0){
List<EquipmentTemplateTreeVo> cj = zy;
cj.removeAll(equipmentTemplateTreeVos);
equipmentTemplateTreeVos = assemblyTree(equipmentTemplateTreeVos,cj);
d.setChildren(equipmentTemplateTreeVos);
}
}
return dd;
}