递归实现文件目录效果
- 首先定义一个树结构实体
@Data
public class FirstHierarchy {
private String title;
private String key;
private List<FirstHierarchy> children;
}
children为子对象
- 然后在数据库查出所需数据
public List<FirstHierarchy> getLoaclTree(String projectId) {
List<IpdFileUnified> ipdFileUnifieds = ipdFileUnifiedMapper.getLocalTree(projectId);
List<FirstHierarchy> firstHierarchies = new ArrayList<>();
for (IpdFileUnified i: ipdFileUnifieds
) {
String parentId = i.getParentId();
FirstHierarchy firstHierarchy = new FirstHierarchy();
if (parentId.equals("0")){
firstHierarchy.setTitle(i.getFileName());
firstHierarchy.setKey(i.getId());
firstHierarchy.setChildren(new ArrayList<>());
firstHierarchies.add(firstHierarchy);
}
}
List<FirstHierarchy> firstHierarchies1 = new ArrayList<>();
for (IpdFileUnified j: ipdFileUnifieds
) {
firstHierarchies1 = buildTree(firstHierarchies, j);
}
return firstHierarchies1;
}
我这里是查询出所有数据然后将顶级目录添加进入树集合,子目录暂时为空
父子关联是用的parentId
然后再遍历目录集合调用递归方法
public List<FirstHierarchy> buildTree(List<FirstHierarchy> firstHierarchies,IpdFileUnified ipdFileUnified) {
for (FirstHierarchy f : firstHierarchies
) {
if (f.getKey().equals(ipdFileUnified.getParentId())) {
FirstHierarchy firstHierarchy = new FirstHierarchy();
firstHierarchy.setTitle(ipdFileUnified.getFileName());
firstHierarchy.setKey(ipdFileUnified.getId());
firstHierarchy.setChildren(new ArrayList<>());
f.getChildren().add(firstHierarchy);
} else {
if (f.getChildren() != null){
buildTree(f.getChildren(), ipdFileUnified);//当当前遍历对象里面有子对象时,遍历子对象
}
}
}
if (ipdFileUnified.getParentId() == null || ipdFileUnified.getParentId().equals("")) {
return firstHierarchies;
}
return firstHierarchies;
}
最后调用接口返回成功
不懂的可以私信问我
欢迎大佬指点!!!!!!
欢迎大佬指点!!!!!!
欢迎大佬指点!!!!!!
欢迎大佬指点!!!!!!
欢迎大佬指点!!!!!!