如何将扁平化的 LinkedHashMap 转换为表示层次结构的 LinkedHashMap

How to transform a flattened LinkedHashMap to one that represents a hierarchy

我是 Java 新手,我在概念化如何解决尝试创建表示某些分层数据的 LinkedHashMap 的问题时遇到了问题。

这是我所了解的。在此示例中,我有一个 LinkedHashMap 显示扁平化结果:

public static Map<String, String> myDataSet = new LinkedHashMap() {
{
    put("MY_KEY_1", "My First Label");
    put("MY_KEY_2", "My Second Label");
    put("MY_KEY_3", "My Third Label");
    put("MY_KEY_4", "My Fourth Label");
    put("MY_KEY_5", "My Fifth Label");
}
};

这只是我创建 LinkedHashMap 的方式。此时,我遍历我的响应主体并使用键捕获值……但您不需要看到所有那些丑陋的代码。最后我得到了这个响应,其中内容是一个对象数组:

{
data:{
    content:[
        {
            name: "My First Label",
            value: 500,
        },
        {
            name: "My Second Label",
            value: 1500,
        },
        {
            name: "My Third Label",
            value:2500,
        },
        {
            name: "My Fourth Label",
            value: 3500,
        },
        {
            name: "My Fifth Label",
            value: 4500,
        }
    ]
}

},

太棒了,扁平化的数据集。但我真正想学习的是如何创建一个 LinkedHashMap,结果是这样的:

{
data:{
    content:[
        {
            name: "My First Label",
            props:[
                {
                    name: "Sub label 1",
                    value: 500,
                },
                {
                    name: "Sub label 2",
                    value: 1500,
                },
            ]
        },
        {
            name: "My Second Label",
            props:[
                {
                    name: "Sub label 1",
                    value: 2500,
                },
            ]
        },
        {
            name: "My Fourth Label",
            props: [
                {
                    name: "Sub label 1",
                    value: 500,
                },
            ],
        },
        {
            name: "My Fifth Label",
            props: [
                {
                    name: "Sub label 1"
                    value: 4500
                }
            ],
        }
    ]
}

}

而且我对如何开始改变它有点迷茫。任何提示表示赞赏。谢谢。

这可以通过将映射值的类型设置为另一个 Map 来实现 - 例如Map<String, Map<String, Integer>>.

public static Map<String, Map<String, Integer>> myDataSet =
        new LinkedHashMap<String, Map<String, Integer>>() {{
    this.put("My First Label", new LinkedHashMap<String, Integer>() {{
        this.put("Sub label 1", 500);
        this.put("Sub label 2", 1500);
    }});
    this.put("My Second Label", new LinkedHashMap<String, Integer>() {{
        this.put("Sub label 1", 2500);
    }});
}};