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

阿里云OSS 文件List 转换为树形结果,第1张

阿里云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 formatFoldersTree(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);

        


    }
}




欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5660686.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存