java - 如何将字符串(HashMap的ArrayList)转换为ArrayList

标签 java arraylist

这是我创建 HashMap 和 ArrayList 的代码。

HashMap wbsMap = new HashMap();
ArrayList<HashMap<?, String>> list = new ArrayList();
ArrayList<HashMap<?, String>> listChildNew = new ArrayList();

现在我已经存储了与像

这样的键对应的值
wbsMap.put("COMPONENT_"+i, bom.getString("COMPONENT"));
wbsMap.put("COMP_QTY_"+i, bom.getString("COMP_QTY").replaceAll("\\s+",""));
wbsMap.put("COMP_UNIT_"+i, bom.getString("COMP_UNIT"));
wbsMap.put("NS_LEFT_"+i,String.valueOf(NS_LEFT));
listChildNew=generateBOMStructureLatest(wbsMap,bom.getString("COMPONENT"),NS_RIGHT,String.valueOf(i));
    if(listChildNew.size() >0){
        wbsMap.put("NS_CHILD_"+i,listChildNew);
    }
wbsMap.put("NS_RIGHT_"+i,String.valueOf(NS_LEFT));
list.add(wbsMap);

现在键 NS_CHILD_HashMapArrayList 组成,即 listChildNew 。但它作为 String 对象存储在 wbsMap HashMap 中。因此,我无法迭代 key NS_CHILD_value 。如何将其转换回HashMap的ArrayList。

以下是列表在日志文件中的显示方式。

[{MATL_DESC_0=Slug for spiral casing, NS_LEFT_0=2, COMP_UNIT_0=PC, NS_RIGHT_0=3, COMP_QTY_0=1, COMPONENT_0=400-110}, 
 {NS_LEFT_1=4, MATL_DESC_1=Flat gasket, COMP_UNIT_1=PC, NS_RIGHT_1=5, COMP_QTY_1=1, COMPONENT_1=400-120}, 
 {MATL_DESC_2=Hexagon head screw M10, COMP_UNIT_2=PC, COMPONENT_2=400-130, NS_LEFT_2=6, NS_RIGHT_2=7, COMP_QTY_2=8}, 
 {COMPONENT_3=400-140, NS_RIGHT_3=15, NS_CHILD_3=[{COMPONENT_3_child=400-141, NS_RIGHT_3_child=10, NS_LEFT_3_child=9, COMP_QTY_3_child=1, MATL_DESC_3_child=Sensor, COMP_UNIT_3_child=PC}, 
                                               {COMPONENT_3_child=400-142, NS_RIGHT_3_child=12, NS_LEFT_3_child=11, COMP_QTY_3_child=1, MATL_DESC_3_child=Display, COMP_UNIT_3_child=PC}, 
                                               {COMPONENT_3_child=400-143, NS_RIGHT_3_child=14, NS_LEFT_3_child=13, COMP_QTY_3_child=1, MATL_DESC_3_child=Casing, COMP_UNIT_3_child=PC}], NS_LEFT_3=8, COMP_QTY_3=1, MATL_DESC_3=Revolution counter, COMP_UNIT_3=PC}, 
{COMPONENT_4=400-150, NS_LEFT_4=16, NS_RIGHT_4=23, NS_CHILD_4=[{NS_LEFT_4_child=17, COMPONENT_4_child=400-151, MATL_DESC_4_child=Temperature sensor, NS_RIGHT_4_child=18, COMP_QTY_4_child=1, COMP_UNIT_4_child=PC}, 
                                                            {NS_LEFT_4_child=19, COMPONENT_4_child=400-152, MATL_DESC_4_child=Display, NS_RIGHT_4_child=20, COMP_QTY_4_child=1, COMP_UNIT_4_child=PC}, 
                                                            {NS_LEFT_4_child=21, COMPONENT_4_child=400-153, MATL_DESC_4_child=Casing, NS_RIGHT_4_child=22, COMP_QTY_4_child=1, COMP_UNIT_4_child=PC}], COMP_QTY_4=1, MATL_DESC_4=Thermostat, COMP_UNIT_4=PC}, 
]

最佳答案

听起来您正在尝试使用 HashMap 创建树结构。试试这个而不是 HashMap。

class HashTree {
    private HashMap<String, HashTree> nodes;
    private String value;

    public HashTree(String value){
        this.value = value;
        this.nodes = new HashMap<>();
    }

    public HashTree(HashMap<String,String> nodes){
        this.value = null;
        this.nodes = new HashMap<>();

        for(Entry<String,String> node : nodes){
            this.nodes.put(node.key,node.value);
        }
    }

    public void put(String key, String value){
        nodes.put(key, new HashTree(value));
    }

    public void put(String key, HashMap<String, String> childNodes){
        nodes.put(key, new HashTree(childNodes));
    }

    // Additional getters and setters
}

关于java - 如何将字符串(HashMap的ArrayList)转换为ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30188667/

相关文章:

java - 类加载器如何确定它可以加载哪些类?

java - Apache Camel JMS : "Not allowed to create destination" when trying to connect to a queue

java - FindBugs 警告 : Inefficient use of keySet iterator instead of entrySet iterator

java - 为什么今天的日期显示为之前的日期?

java - 根据Java/Grails中的元素从 map 中提取/过滤数据

java - Apache Camel 文件输出组件性能缓慢 - Java

java - 通过 JComboBox 中的选定项目从数组列表中删除对象

java - 使用冒泡排序排序 ArrayList<BigDecimal>

java - 如何在java中分割字符串后将其部分存储在字典中

java - 为什么 LinkedList 在 java 中没有 initialCapacity?