【问题标题】:How to pass an inner hashMap with same keys inside an outer hashMap with different keys?如何在具有不同键的外部 hashMap 中传递具有相同键的内部 hashMap?
【发布时间】:2020-01-11 22:40:59
【问题描述】:
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;
}

在这种情况下,我只得到最后一组,所有数据都被覆盖,谁能帮我弄清楚如何以如下格式传递数据?

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

等等。

【问题讨论】:

  • fileNameConstrains 映射的所有键都指向同一个映射对象。因此,为一个键更改映射将反映在共享该对象的所有键的值中。如果不需要,您需要为每个键声明一个新映射。
  • 您在fileNameConstrains 中添加valueFromEachOfThoseNineFields 作为值。然后您对valueFromEachOfThoseNineFields 进行更改,这会更改fileNameConstrains 内部的状态,因为它仍然是相同的HashMap。将其添加到外部映射后,您需要使用valueFromEachOfThoseNineFields = new HashMap&lt;String,Object&gt;(); 创建一个new HashMap。

标签: java data-structures collections


【解决方案1】:

每次您想将值存储到 valueFromEachOfThoseNineFields 并随后将 valueFromEachOfThoseNineFields 存储到 fileNameConstrains 时,都需要将新的 HashMap 实例分配给 valueFromEachOfThoseNineFields,如下所示:

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;
    }
}

输出:

{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}}

【讨论】:

    【解决方案2】:

    您的数据被覆盖的原因是因为您在内部映射中使用了相同的键 正如文档所说,地图的密钥应该是唯一的

    所以要在这里解决您的问题,您必须在每个新文件上恢复地图

    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);
    

    【讨论】:

      猜你喜欢
      • 2013-10-16
      • 2017-08-23
      • 2014-08-18
      • 1970-01-01
      • 1970-01-01
      • 2016-11-23
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多