Java 嵌套树映射-值存储在单个键中

Java 嵌套树映射-值存储在单个键中,java,Java,这是我第一次尝试实现树映射。在这种情况下,通过迭代检索到以下数据: A a shape:square fill:yes size:very large B b shape:square fill:yes size:very large C c shape:square fill:yes size:very large 我需要将这些数据存储在树形图中。例

这是我第一次尝试实现树映射。在这种情况下,通过迭代检索到以下数据:

A
    a
    shape:square
    fill:yes
    size:very large
B
    b
        shape:square
        fill:yes
        size:very large
C
    c
        shape:square
        fill:yes
        size:very large
我需要将这些数据存储在树形图中。例如TreeMap(a,TreeMap(a,TreeMap(keySize,sizeAttribute)))

我实施了以下措施:

Map<String, TreeMap<String, TreeMap<String, String>>> squareRPM = new HashMap<String, TreeMap<String, TreeMap<String, String>>>(); //Everytime it changes object create a new squareRPM
            TreeMap<String, TreeMap<String, String>> component = new TreeMap<String, TreeMap<String, String>>();  
            TreeMap<String, String> CompAttr = new TreeMap<String, String>();    
我想要的输出是:

[A={a={fill=yes, shape=square, size=very large}}]
[B={b={fill=yes, shape=square, size=very large}}]
但我有一个:

[A={a={fill=yes, shape=square, size=very large},b ={fill=yes, shape=square, size=very large},c={fill=yes, shape=square, size=very large}}]
所有内容都存储在A中。如何解决此问题

多谢各位


解决了

        for(String figureName : problem.getFigures().keySet()) {  //Iterates through the Name of figures as A, B, C, 1...6
        RavensFigure thisFigure = problem.getFigures().get(figureName);
        TreeMap<String, TreeMap<String, TreeMap<String, String>>> squareRPM = new TreeMap<String, TreeMap<String, TreeMap<String, String>>>(); //Everytime it changes object create a new squareRPM    

        for(String objectName : thisFigure.getObjects().keySet()) { //Iterates through components in each A, B, C Ex.  A a 
        RavensObject thisObject = thisFigure.getObjects().get(objectName);
        TreeMap<String, TreeMap<String, String>> component = new TreeMap<String, TreeMap<String, String>>();  
        TreeMap<String, String> CompAttr = new TreeMap<String, String>();    

        for(String attributeName : thisObject.getAttributes().keySet()) {  //Iterates through attributes 
        String attributeValue = thisObject.getAttributes().get(attributeName);


        CompAttr.put(attributeName, attributeValue);

        }       
        component.put(objectName, CompAttr);
        squareRPM.put(figureName, component);
for(String figureName:problem.getFigures().keySet()){//遍历图的名称,如A、B、C、1…6
RavensFigure thisFigure=problem.getFigures().get(figureName);
TreeMap squareRPM=new TreeMap();//每次它更改对象时创建一个新的squareRPM
for(String objectName:thisFigure.getObjects().keySet()){//遍历每个A、B、C Ex.A中的组件
RavensObject thisObject=thisFigure.getObjects().get(objectName);
TreeMap组件=新的TreeMap();
TreeMap CompAttr=新的TreeMap();
对于(字符串attributeName:thisObject.getAttributes().keySet()){//遍历属性
字符串attributeValue=thisObject.getAttributes().get(attributeName);
CompAttr.put(attributeName,attributeValue);
}       
component.put(objectName,compatr);
平方RPM.put(图名称、部件);
//

for(条目:squareRPM.entrySet()){
String key=entry.getKey();
TreeMap value=entry.getValue();
System.out.println(键+“=>”+值);
}
}       
}

问题是我在创建每个树映射>

在映射中放置一个映射通常是一个坏主意,因为它会混淆每个人。使用清晰的命名实现自己的类。这些类可以在内部使用其他自定义类的映射(可以再次包含映射)。是的,我曾想过构建类,但我对Java是新手,这是第一次尝试将属性放在一个可以比较它们的位置。我将试试你的建议。非常感谢你!我怀疑它是否能被制造出来。
        for(String figureName : problem.getFigures().keySet()) {  //Iterates through the Name of figures as A, B, C, 1...6
        RavensFigure thisFigure = problem.getFigures().get(figureName);
        TreeMap<String, TreeMap<String, TreeMap<String, String>>> squareRPM = new TreeMap<String, TreeMap<String, TreeMap<String, String>>>(); //Everytime it changes object create a new squareRPM    

        for(String objectName : thisFigure.getObjects().keySet()) { //Iterates through components in each A, B, C Ex.  A a 
        RavensObject thisObject = thisFigure.getObjects().get(objectName);
        TreeMap<String, TreeMap<String, String>> component = new TreeMap<String, TreeMap<String, String>>();  
        TreeMap<String, String> CompAttr = new TreeMap<String, String>();    

        for(String attributeName : thisObject.getAttributes().keySet()) {  //Iterates through attributes 
        String attributeValue = thisObject.getAttributes().get(attributeName);


        CompAttr.put(attributeName, attributeValue);

        }       
        component.put(objectName, CompAttr);
        squareRPM.put(figureName, component);
        for(Entry<String, TreeMap<String, TreeMap<String, String>>> entry : squareRPM.entrySet()) {

              String key = entry.getKey();
              TreeMap<String, TreeMap<String, String>> value = entry.getValue();

              System.out.println(key + " => " + value);

        }
    }       

}