首页 > 其他分享 >分享一个树级结构数据,自动生成各个层次节点的code代码方法,优势在于可以在获取到子级的同时,可以直接根据code获取出它对应的所有父级的对应code,避免循环递归全扫描

分享一个树级结构数据,自动生成各个层次节点的code代码方法,优势在于可以在获取到子级的同时,可以直接根据code获取出它对应的所有父级的对应code,避免循环递归全扫描

时间:2024-05-13 17:09:38浏览次数:34  
标签:code return String 获取 existingOrgCodes static parentOrgCode 对应

public class OrgCodeHierarchy {

    private static final int MAX_SEQUENCE = 999;
    private static final String ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    private static Map<String, Boolean> existingOrgCodeMaps = new HashMap<>();

    public static Map<String, Boolean> convertListToMap(List<String> orgCodes) {
        Map<String, Boolean> orgCodeMap = new HashMap<>();
        for (String code : orgCodes) {
            orgCodeMap.put(code, true);
        }
        return orgCodeMap;
    }

    public static String generateChildOrgCode(String parentOrgCode, List<String> existingOrgCodes) {
        existingOrgCodeMaps=convertListToMap(existingOrgCodes);
        if (parentOrgCode == null || parentOrgCode.isEmpty()) {
            return generateNewOrgCode();
        }

        char startChar = parentOrgCode.charAt(0);
        int level = parentOrgCode.length() / 4;

        char nextChar = startChar;
        String childOrgCode = parentOrgCode + nextChar + String.format("%03d", 1);

        while (existingOrgCodes.contains(childOrgCode)) {
            childOrgCode = generateNextAvailableOrgCode(childOrgCode);
        }

        return childOrgCode;
    }

    private static String generateNextAvailableOrgCode(String orgCode) {
        int sequenceNumber = Integer.parseInt(orgCode.substring(orgCode.length() - 3)) + 1;
        return orgCode.substring(0, orgCode.length() - 3) + String.format("%03d", sequenceNumber);
    }

    public static List<String> generateChildOrgCodes(String parentOrgCode, List<String> existingOrgCodes, int numChildren) {
        List<String> childOrgCodes = new ArrayList<>();
        for (int i = 1; i <= numChildren; i++) {
            String childOrgCode = generateChildOrgCode(parentOrgCode, existingOrgCodes);
            childOrgCodes.add(childOrgCode);
            existingOrgCodes.add(childOrgCode);
        }
        return childOrgCodes;
    }

    private static String generateNewOrgCode() {
        String newOrgCode = "A001";
        while (existingOrgCodeMaps.containsKey(newOrgCode)) {
            int sequenceNumber = Integer.parseInt(newOrgCode.substring(1)) + 1;
            if (sequenceNumber > MAX_SEQUENCE) {
                newOrgCode = getNextChar(newOrgCode.charAt(0)) + "001";
            } else {
                newOrgCode = newOrgCode.charAt(0) + String.format("%03d", sequenceNumber);
            }
        }
        existingOrgCodeMaps.put(newOrgCode, true);
        return newOrgCode;
    }

    private static char getNextChar(char currentChar) {
        int index = ALPHABET.indexOf(currentChar);
        if (index == ALPHABET.length() - 1) {
            return 'A';
        } else {
            return ALPHABET.charAt(index + 1);
        }
    }

    public static void main(String[] args) {
        String parentOrgCode = null;
        List<String> existingOrgCodes = new ArrayList<>();
        existingOrgCodes.add("A001");
        existingOrgCodes.add("A001A001");
        List<String> childOrgCodes = generateChildOrgCodes(parentOrgCode, existingOrgCodes, 3);
        System.out.println("Generated child org codes:");
        for (String orgCode : childOrgCodes) {
            System.out.println(orgCode);
        }
    }
}

互相交流,我觉得应该还有更好的方法,但是需求催的急,暂时就做到这里吧

标签:code,return,String,获取,existingOrgCodes,static,parentOrgCode,对应
From: https://www.cnblogs.com/dayandday/p/18189585

相关文章

  • 网页获取网络时间
    constgetNetTime=()=>{ returnnewPromise((resolve,reject)=>{ varxhr=newXMLHttpRequest(); if(!xhr){ xhr=newActiveXObject("Microsoft.XMLHTTP"); } xhr.open("......
  • react native 项目使用 Xcode 打包上架 App Store
    一、创建证书、标识符和描述文件等:1.前提条件可正常运行和打包的代码、Apple开发者账号点击注册Apple开发者账号注册完进入页面可以看到证书、标识符和描述文件创建入口2.创建AppID点击Identifiers旁边的加号选择AppIDs,点击Continue。选择App,点击Conti......
  • hashCode()与equals()之间的关系
    在Java中,`hashCode()`和`equals()`方法之间存在紧密的关系,主要体现在它们共同作用于对象的比较和存储上,尤其是在集合(如HashSet、HashMap)和哈希表的实现中。理解这两者的关系对于写出高效、正确的Java代码至关重要。 hashCode()目的:`hashCode()`方法用于返回对象的哈希码值,这是......
  • hashCode()与equals()之间的关系
    在Java中,`hashCode()`和`equals()`方法之间存在紧密的关系,主要体现在它们共同作用于对象的比较和存储上,尤其是在集合(如HashSet、HashMap)和哈希表的实现中。理解这两者的关系对于写出高效、正确的Java代码至关重要。 hashCode()目的:`hashCode()`方法用于返回对象的哈希码值,这是......
  • [LeetCode] 1584.连接所有点的最小费用 Kruskal And Prim 算法 Java 并查集
    Problem:1584.连接所有点的最小费用目录Kruskal算法复杂度CodePrim算法复杂度CodeKruskal算法复杂度时间复杂度:添加时间复杂度,示例:$O(mlog(m))$空间复杂度:添加空间复杂度,示例:$O(n)$CodeclassSolution{publicintminCostConnectPoints(int[][]po......
  • AtCoder Beginner Contest 353
    AtCoderBeginnerContest353abc353_c题意:定义\(F(x,y)\)为\((x+y)mod10^8\)的值,求\(\displaystyle\sum_{i=1}^{N-1}\sum_{j=i+1}^Nf(A_i,A_j).\)思路:对于\(\displaystyle\sum_{i=1}^{N-1}\sum_{j=i+1}^N\f(A_i,A_j).\)来说,每个\(A_i\)的次数都是\(n-1\)次,所以如果没有\(m......
  • 获取网站音频
    语音库序列猴子开放平台(moyin.com)爬取网站语音[TIPS001从播放音乐的网页中提取mp3音频文件的两种方式及背后的技术思考【短连接和长连接】_如何在开发者模式找到mp3文件-CSDN博客](https://blog.csdn.net/u010425839/article/details/84706736#:~:text=通过开发者模式找到......
  • Java 高效获取两个List中不同的元素集合
    /***借助Map来获取listA、listB的不同元素集合**@paramlistA集合A*@paramlistB集合B*@returnlist<String>不同元素集合*/publicstaticList<String>getDifferListByMap(List<String>listA,List<String>listB){List<String>differList=new......
  • Leedcode-最大连续 1 的个数
    自己写的:fromtypingimportListclassSolution:deffindMaxConsecutiveOnes(self,nums:List[int])->int:#初始化最大连续1的计数器和临时连续1的计数器count=0temp=0#获取列表长度n=len(nums)#初......
  • PHP函数date()获取当前时间
    代码:显示的格式:年-月-日小时:分钟:秒相关参数:a:"am"或者"pm"A:"AM"或者"PM"d:几日,二位数字,若不足二位则前面补零,如:"01"至"31"D:星期几,三个英文字母,如:"Fri"F:月份,英文全名,如:"January"h:12小时制的小时,如:"01"至"12&......