阿里云的oss 可以返回一个文件List 但是文件List 有时候需要转换为树形结果
实现算法的思路是递归。
直接看代码:
import java.io.File; import java.util.*; import java.util.stream.Collectors; public class OssTreeList { static Folder buildFolder(String name) { Folder folder = new Folder(); folder.setName(name); folder.setChildren(new ArrayList<>()); folder.setPermission(Permission.of(1, Collections.emptyList())); return folder; } static ListformatFoldersTree(OSSObjectimportContext importCtx, List folderObjects) { List folders = new ArrayList<>(); List > namesList = new ArrayList<>(50); for (HttpClientUtils.OSSObject object : folderObjects) { List
names = Arrays.asList(object.getName().split(File.separator)); System.out.println(object.getName()); namesList.add(names); } Folder topFolder = buildFolder(importCtx.getItemNum()); linkedHashMap >> brandMap = namesList.stream().collect(Collectors.groupingBy(a -> a.get(0), linkedHashMap::new, Collectors.toList())); List > subFolders = brandMap.get(topFolder.getName()).stream().filter(a -> a.size() > 1).collect(Collectors.toList()); System.out.println(brandMap); if (subFolders.size() > 0) { folders.add(link(topFolder, subFolders)); } else { folders.add(topFolder); } return folders; } static Folder link(Folder folder, List
> sublists) { List
folders = new ArrayList<>(); List > subliststemp = new ArrayList<>(); for (List
subList : sublists) { subList = subList.subList(1, subList.size()); subliststemp.add(subList); } linkedHashMap >> brandMap = subliststemp.stream().collect(Collectors.groupingBy(a -> a.get(0), linkedHashMap::new, Collectors.toList())); System.out.println(brandMap); for (String folderName : brandMap.keySet()) { System.out.println("新建父层级文件夹: " + folderName); Folder current = buildFolder(folderName); List > subFolders = brandMap.get(folderName).stream().filter(a -> a.size() > 1).collect(Collectors.toList()); System.out.println(brandMap); if (subFolders.size() > 0) { link(current, subFolders); } folders.add(current); } folder.setChildren(folders); return folder; } public static void main(String[] args) { HttpClientUtils.OSSObject f1 = new HttpClientUtils.OSSObject("1028/设计/设计师文件/sku/"); HttpClientUtils.OSSObject f2 = new HttpClientUtils.OSSObject("1028/设计/N1/sku/"); HttpClientUtils.OSSObject f3 = new HttpClientUtils.OSSObject("1028/设计/N2/sku/"); HttpClientUtils.OSSObject f4 = new HttpClientUtils.OSSObject("1028/3D/N1/sku1/"); HttpClientUtils.OSSObject f5 = new HttpClientUtils.OSSObject("1028/3D/设计师文件/sku/"); HttpClientUtils.OSSObject f6 = new HttpClientUtils.OSSObject("1028/3D/N1/sku1/pp"); HttpClientUtils.OSSObject f7 = new HttpClientUtils.OSSObject("1028/3D/设计师文件/sku3/"); HttpClientUtils.OSSObject f8 = new HttpClientUtils.OSSObject("1028/素材/N1/sku2/op"); HttpClientUtils.OSSObject f9 = new HttpClientUtils.OSSObject("1028/3D/设计师文件2/sku/2/5"); HttpClientUtils.OSSObject f10 = new HttpClientUtils.OSSObject("1028/3D/设计师文件6/sku2/3/5"); HttpClientUtils.OSSObject f11 = new HttpClientUtils.OSSObject("1028/"); HttpClientUtils.OSSObject[] temp = {f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11}; List
folderObjects = Arrays.asList(temp); OSSObjectimportContext importCtx = new OSSObjectimportContext(); importCtx.setItemNum("1028"); formatFoldersTree(importCtx, folderObjects); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)