首页 > 编程语言 >java 实现字符串转换为树

java 实现字符串转换为树

时间:2022-08-28 20:55:57浏览次数:50  
标签:tmp java String TreeMap add way 字符串 listOfPaths 为树


import java.util.*;

class Node {
    
    public static void main(String[] args) {
        ArrayList<String> listOfPaths = new ArrayList<String>();
        listOfPaths.add("主要材料|钢铁|锌铜板");
        listOfPaths.add("主要材料|通风口|cc");
        listOfPaths.add("主要材料|压路机");
        listOfPaths.add("主要材料|加药装置");
        listOfPaths.add("主要材料|加药装置1");
        listOfPaths.add("主要材料|钢铁");
        listOfPaths.add("主要材料|钢铁|锌铜板1");
        listOfPaths.add("工程设备|钢铁|锌铜板");

        TreeMap structure = new TreeMap<>();
        for (String path : listOfPaths) {
            String[] tmp = path.split("\\|", 2); // [ "folder a/", "folder b/file 1"]  for first loops step
            String way = "";
            put(structure, tmp[0], tmp[1], way);
        }
        List<Material> materials = new ArrayList<>();
        print(structure, "", materials);

        System.out.println(Arrays.toString(materials.toArray()));
    }

    private static void put(TreeMap structure, String root, String rest, String way) {
        String[] tmp = rest.split("\\|", 2);

        TreeMap rootDir = (TreeMap) structure.get(root);

        if (rootDir == null) {
            rootDir = new TreeMap();
            structure.put(root, rootDir);
        }
        if (tmp.length == 1) { // path end
            rootDir.put(tmp[0], null);
        } else {
            put(rootDir, tmp[0], tmp[1], way);
        }
    }

    private static void print(TreeMap map, String way, List<Material> materials) {
        if (map == null || map.isEmpty())
            return;
        String o = way;
        for (Object m : map.entrySet()) {
            Material material = new Material();
            material.setName((String) ((Map.Entry) m).getKey());
            material.setChildren(new ArrayList<>());
            if (Objects.equals(way, "")) {
                way = (String) ((Map.Entry) m).getKey();
            } else {
                way += "|" + (String) ((Map.Entry) m).getKey();
            }
            material.setWay(way);
            materials.add(material);
            print((TreeMap) ((Map.Entry) m).getValue(), way, material.getChildren());
            way = o;
        }
    }

}

标签:tmp,java,String,TreeMap,add,way,字符串,listOfPaths,为树
From: https://www.cnblogs.com/txzn/p/16633619.html

相关文章

  • JavaScript的函数
    //alert是JavaScript语言提供的一个警告函数//它可以接收任意类型的参数,这个参数就是警告框的提示信息   <!DOCTYPEhtml><htmllang="en"><head><metacharse......
  • python常用的进制、字符串、字节之间的转换
    整数之间的进制转换:10进制转16进制:hex(16) ==> 0x1016进制转10进制:int('0x10',16) ==> 16类似的还有oct(),bin()  字符串转整数:10进制字符串:int('10......
  • 力扣393(java)-UTF-8编码验证(中等)
    题目:给定一个表示数据的整数数组 data ,返回它是否为有效的UTF-8编码。UTF-8中的一个字符可能的长度为1到4字节,遵循以下的规则:对于1字节 的字符,字节的第一位......
  • 1616. 分割两个字符串得到回文串
    给你两个字符串 a和 b ,它们长度相同。请你选择一个下标,将两个字符串都在 相同的下标分割开。由 a 可以得到两个字符串: aprefix 和 asuffix ,满足 a=aprefix......
  • Java集合
    集合框架组成部分:1.Collection(存放单列数据):List接口存放数据可以允许重复ArrayList底层基于数组数据结构实现LinkedList底层基于链表数据结构实现Set接口不允许存......
  • JavaScript基础介绍三(事件)
    原生js事件绑定我们直接写几个案例,看懂即可开关灯案例变色<script>letbtnEle=document.getElementById('d2')letdivEle=document.getElementById('......
  • Java开发学习(二十七)----SpringMVC之Rest风格解析及快速开发
    一、REST简介REST(RepresentationalStateTransfer),表现形式状态转换,它是一种软件架构风格当我们想表示一个网络资源的时候,可以使用两种方式:传统风格资源描述形式......
  • Java - NIO 总结
    NIO介绍NIO有人称之为non-blockinglO是从Java1.4版本开始引入的一个新的IOAPI,可以替代标准的lOAPI。NIO与原来的IO有同样的作用和目的,但是使用的方式完全......
  • 力扣507(java)-完美数(简单)
    题目:对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为「完美数」。给定一个 整数 n, 如果是完美数,返回true;否则返回false。 示例1:输......
  • Java并发编程异步操作Future和FutureTask
    学习来源:https://www.cnblogs.com/steakliu/p/16060651.htmlFuture和FutureTaskFuture是一个接口,FutureTask是一个类,实现RunnableFuture接口,RunnableFuture接口继承Fut......