简体   繁体   English

如何在具有不同键的外部hashMap中传递具有相同键的内部hashMap?

[英]How to pass an inner hashMap with same keys inside an outer hashMap with different keys?

public static HashMap<String, HashMap<String,Object>> getDataDictionary() {
    // Virtual Data Creation - Simulating The 9 Fields HAR value
    HashMap<String,Object> valueFromEachOfThoseNineFields = new HashMap<String,Object>();
    HashMap<String, HashMap<String,Object>> fileNameConstrains = new HashMap<String,HashMap<String,Object>>();
    valueFromEachOfThoseNineFields.put("A", 10);
    valueFromEachOfThoseNineFields.put("B", 20);
    valueFromEachOfThoseNineFields.put("C", 30);
    valueFromEachOfThoseNineFields.put("D", 10);
    valueFromEachOfThoseNineFields.put("E", 5);
    valueFromEachOfThoseNineFields.put("F", 20);
    valueFromEachOfThoseNineFields.put("G", 1);
    valueFromEachOfThoseNineFields.put("H", 100);
    valueFromEachOfThoseNineFields.put("I", 66);
    fileNameConstrains.put("File1", valueFromEachOfThoseNineFields);
    valueFromEachOfThoseNineFields.put("A", 10);
    valueFromEachOfThoseNineFields.put("B", 50);
    valueFromEachOfThoseNineFields.put("C", 30);
    valueFromEachOfThoseNineFields.put("D", 90);
    valueFromEachOfThoseNineFields.put("E", 5);
    valueFromEachOfThoseNineFields.put("F", 20);
    valueFromEachOfThoseNineFields.put("G", 10);
    valueFromEachOfThoseNineFields.put("H", 90);
    valueFromEachOfThoseNineFields.put("I", 61);
    fileNameConstrains.put("File2", valueFromEachOfThoseNineFields);
    valueFromEachOfThoseNineFields.put("A", 10);
    valueFromEachOfThoseNineFields.put("B", 60);
    valueFromEachOfThoseNineFields.put("C", 30);
    valueFromEachOfThoseNineFields.put("D", 2);
    valueFromEachOfThoseNineFields.put("E", 13);
    valueFromEachOfThoseNineFields.put("F", 9);
    valueFromEachOfThoseNineFields.put("G", 15);
    valueFromEachOfThoseNineFields.put("H", 88);
    valueFromEachOfThoseNineFields.put("I", 69);
    fileNameConstrains.put("File3", valueFromEachOfThoseNineFields);

    return fileNameConstrains;
}

In this case, I am getting only the last set, all data are getting overridden, can anyone help me to figure out how can I pass data in the format like below?在这种情况下,我只得到最后一组数据,所有数据都被覆盖了,谁能帮我弄清楚如何以如下格式传递数据?

{Key="File1", value={'a'=10,'b'=5}} {Key="File1", value={'a'=10,'b'=5}}

And so on.等等。

You need to assign a new HashMap instance to valueFromEachOfThoseNineFields every time you want to store values into it and subsequently storing valueFromEachOfThoseNineFields into fileNameConstrains as follows:每次要将值存储到valueFromEachOfThoseNineFields ,然后将valueFromEachOfThoseNineFields存储到fileNameConstrains时,您都需要为valueFromEachOfThoseNineFields分配一个新的HashMap实例,如下所示:

import java.util.HashMap;

public class Main {

    public static void main(String[] args) {
        System.out.println(getDataDictionary());
    }

    public static HashMap<String, HashMap<String, Object>> getDataDictionary() {
        // Virtual Data Creation - Simulating The 9 Fields HAR value
        HashMap<String, Object> valueFromEachOfThoseNineFields;
        HashMap<String, HashMap<String, Object>> fileNameConstrains = new HashMap<String, HashMap<String, Object>>();

        valueFromEachOfThoseNineFields = new HashMap<String, Object>();
        valueFromEachOfThoseNineFields.put("A", 10);
        valueFromEachOfThoseNineFields.put("B", 20);
        valueFromEachOfThoseNineFields.put("C", 30);
        valueFromEachOfThoseNineFields.put("D", 10);
        valueFromEachOfThoseNineFields.put("E", 5);
        valueFromEachOfThoseNineFields.put("F", 20);
        valueFromEachOfThoseNineFields.put("G", 1);
        valueFromEachOfThoseNineFields.put("H", 100);
        valueFromEachOfThoseNineFields.put("I", 66);
        fileNameConstrains.put("File1", valueFromEachOfThoseNineFields);

        valueFromEachOfThoseNineFields = new HashMap<String, Object>();
        valueFromEachOfThoseNineFields.put("A", 10);
        valueFromEachOfThoseNineFields.put("B", 50);
        valueFromEachOfThoseNineFields.put("C", 30);
        valueFromEachOfThoseNineFields.put("D", 90);
        valueFromEachOfThoseNineFields.put("E", 5);
        valueFromEachOfThoseNineFields.put("F", 20);
        valueFromEachOfThoseNineFields.put("G", 10);
        valueFromEachOfThoseNineFields.put("H", 90);
        valueFromEachOfThoseNineFields.put("I", 61);
        fileNameConstrains.put("File2", valueFromEachOfThoseNineFields);

        valueFromEachOfThoseNineFields = new HashMap<String, Object>();
        valueFromEachOfThoseNineFields.put("A", 10);
        valueFromEachOfThoseNineFields.put("B", 60);
        valueFromEachOfThoseNineFields.put("C", 30);
        valueFromEachOfThoseNineFields.put("D", 2);
        valueFromEachOfThoseNineFields.put("E", 13);
        valueFromEachOfThoseNineFields.put("F", 9);
        valueFromEachOfThoseNineFields.put("G", 15);
        valueFromEachOfThoseNineFields.put("H", 88);
        valueFromEachOfThoseNineFields.put("I", 69);
        fileNameConstrains.put("File3", valueFromEachOfThoseNineFields);

        return fileNameConstrains;
    }
}

Output:输出:

{File3={A=10, B=60, C=30, D=2, E=13, F=9, G=15, H=88, I=69}, File2={A=10, B=50, C=30, D=90, E=5, F=20, G=10, H=90, I=61}, File1={A=10, B=20, C=30, D=10, E=5, F=20, G=1, H=100, I=66}}

the reason why your data get overridden because you use the same key in the inner map as the documentations says the key for the map should be unique您的数据被覆盖的原因是因为您在内部地图中使用与文档相同的键,说明地图的键应该是唯一的

so to solve your issue here you have to reinstate the map on every new file所以要在这里解决您的问题,您必须在每个新文件上恢复地图

HashMap<String,Object> Map1 = new HashMap<>();
    HashMap<String, HashMap<String,Object>> fileNameConstrains = new HashMap<>();
    Map1.put("A", 10);
    Map1.put("B", 20);
    fileNameConstrains.put("File1", Map1);
    Map1 = new HashMap<String,Object>();
    Map1.put("A", 10);
    Map1.put("B", 50);
    fileNameConstrains.put("File2", Map1);
    Map1 = new HashMap<String,Object>();
    Map1.put("A", 10);
    Map1.put("B", 60);
    fileNameConstrains.put("File3", Map1);

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM