list泛型对象中要有pid和当前对象泛型的list Child
public class BgNatureGroup { @ApiModelProperty(value = "唯一id", name = "id") private String id; @ApiModelProperty(value = "父id", name = "sPid") private String sPid; List<BgNatureGroup> children = new ArrayList<>(); }
list转Tree
List<BgNatureGroup> bgNatureGroups = bgNatureGroupDao.selectNatureGroup(param); List<BgNatureGroup> natureGroupTree = buildValueTree(bgNatureGroups); /** * 构造项目树形结构 * * @param depts * @return */ private List<BgNatureGroup> buildValueTree(List<BgNatureGroup> depts) { Map<String, BgNatureGroup> entityMap = new HashMap<>(); List<BgNatureGroup> resultList = new ArrayList<>(); for (BgNatureGroup entity : depts) { entity.setChildren(new ArrayList<>()); entityMap.put(entity.getId(), entity); } for (BgNatureGroup entity : depts) { BgNatureGroup parentEntity = entityMap.get(entity.getsPid()); if (StringUtils.isNull(parentEntity)) { resultList.add(entity); continue; } parentEntity.getChildren().add(entity); } for (BgNatureGroup nv:resultList) { if(nv.getChildren().size()>0){ handleChildren(nv.getChildren()); } if(nv.getChildren().size()==0){ nv.setChildren(null); } } return resultList; } private void handleChildren(List<BgNatureGroup> d){ for (BgNatureGroup nv:d) { if(nv.getChildren().size()>0){ handleChildren(nv.getChildren()); } if(nv.getChildren().size()==0){ nv.setChildren(null); } } }
Tree转List
传参为Tree的集合
public ResponseBean saveGroupTree(List<BgNatureGroup> list) { List<BgNatureGroup> natureGroups = treeToList(list, null); return new ResponseBean(true, "操作成功", natureGroups); } /** * 树形结构转list * * @param * @return */ private List<BgNatureGroup> treeToList(List<BgNatureGroup> depts, String pid) { List<BgNatureGroup> resultList = new ArrayList<>(); for (BgNatureGroup ip : depts) { ip.setsPid(pid); if (ip.getChildren() != null && ip.getChildren().size() > 0) { resultList.addAll(treeToList(ip.getChildren(), ip.getId())); ip.setChildren(null); resultList.add(ip); } else { resultList.add(ip); } } return resultList; }