阿里云OSS 文件List 转换为树形结果

阿里云的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 List<ListDown*/

    /**
     * 生成一个Tree 型结构List
     *
     * @param folderObjects
     * @return
     */
    static List<Folder> formatFoldersTree(OSSObjectImportContext importCtx, List<HttpClientUtils.OSSObject> folderObjects) {
    
    
        List<Folder> folders = new ArrayList<>();
        List<List<String>> namesList = new ArrayList<>(50);
        for (HttpClientUtils.OSSObject object : folderObjects) {
    
    
            List<String> names = Arrays.asList(object.getName().split(File.separator));
            System.out.println(object.getName());
            namesList.add(names);
        }
        Folder topFolder = buildFolder(importCtx.getItemNum());
        LinkedHashMap<String, List<List<String>>> brandMap = namesList.stream().collect(Collectors.groupingBy(a -> a.get(0), LinkedHashMap::new, Collectors.toList()));
        List<List<String>> 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<List<String>> sublists) {
    
    

        List<Folder> folders = new ArrayList<>();
        List<List<String>> subliststemp = new ArrayList<>();
        for (List<String> subList : sublists) {
    
    
            subList = subList.subList(1, subList.size());
            subliststemp.add(subList);
        }
        LinkedHashMap<String, List<List<String>>> 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<List<String>> 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<HttpClientUtils.OSSObject> folderObjects = Arrays.asList(temp);
        OSSObjectImportContext importCtx = new OSSObjectImportContext();
        importCtx.setItemNum("1028");
        formatFoldersTree(importCtx, folderObjects);

        /*HttpClientUtils.OSSObject f2 = new HttpClientUtils.OSSObject("1028/设计/N1/sku/");
        HttpClientUtils.OSSObject[] temp = {f2};
        List<HttpClientUtils.OSSObject> folderObjects = Arrays.asList(temp);
        OSSObjectImportContext importCtx = new OSSObjectImportContext();
        importCtx.setItemNum("1028");
        formatFoldersTree(importCtx, folderObjects);*/


    }
}




Guess you like

Origin blog.csdn.net/keep_learn/article/details/121878406