【问题标题】:How to add value of key to another in Hash Map if there are any duplicate keys如果有任何重复的键,如何将键的值添加到哈希图中的另一个键
【发布时间】:2018-07-02 12:34:03
【问题描述】:

我正在尝试将 json 数据放入可能包含许多重复键的 HashMap 中。 例如:

    {
    "member Detial": {
        "firstname": "jhon",
        "lastName": "wick",
        "Address": "New York",
        "Email": "jhonwick@boogiman.com",
        "Fax Number": "09876543",
        "Contact Number": "9876543210",
        "Password": "newyorkcitizen",
        "confirm password": "newyorkcitizen",
        "NationalProviderIdentifier": "Apollo",
        "PartyID": "1"
    },


    "Physician": {
        "firstname": "jhon",
        "lastName": "wick",
        "Email": "jhonwick@boogiman.com",
        "Fax Number": "09876543",
        "Contact Number": "9876543210",
        "NationalProviderIdentifier": "Apollo",
        "PartyID": "1"

    },

    "PhysicianGroup": {
        "Address": "New York",
        "Email": "jhonwick@boogiman.com",
        "Fax Number": "09876543",
        "Contact Number": "9876543210",
        "NationalProviderIdentifier": "Apollo",
        "Hospital name": "Apollo",
        "Tax ID": "12345",
        "PartyID": "1"

    },
            "Physician": {
        "Address": "New York",
        "Email": "jhonwick@boogiman.com",
        "Fax Number": "09876543",
        "Contact Number": "9876543210",
        "NationalProviderIdentifier": "Apollo",
        "Hospital name": "Apollo",
        "Tax ID": "12345",
        "PartyID": "1"

    },
}

在上面的json文件中,“成员详细信息”被认为是键,括号内的数据被认为是值。但这里的问题是上面的 json 示例中可能存在重复的键,例如“Physician”。

我想将第二个“医生”的值添加到第一个“医生”而不覆盖其值并删除重复的键。 例如:`

   {

"member Detial": {
    "firstname": "jhon",
    "lastName": "wick",
    "Address": "New York",
    "Email": "jhonwick@boogiman.com",
    "Fax Number": "09876543",
    "Contact Number": "9876543210",
    "Password": "newyorkcitizen",
    "confirm password": "newyorkcitizen",
    "NationalProviderIdentifier": "Apollo",
    "PartyID": "1"
},


"Physician": [{
        "firstname": "jhon",
        "lastName": "wick",
        "Email": "jhonwick@boogiman.com",
        "Fax Number": "09876543",
        "Contact Number": "9876543210",
        "NationalProviderIdentifier": "Apollo",
        "PartyID": "1"
    },
    {
        "Address": "New York",
        "Email": "jhonwick@boogiman.com",
        "Fax Number": "09876543",
        "Contact Number": "9876543210",
        "NationalProviderIdentifier": "Apollo",
        "Hospital name": "Apollo",
        "Tax ID": "12345",
        "PartyID": "1"
    }
],
"PhycianGroup": {
    "Address": "New York",
    "Email": "jhonwick@boogiman.com",
    "Fax Number": "09876543",
    "Contact Number": "9876543210",
    "NationalProviderIdentifier": "Apollo",
    "Hospital name": "Apollo",
    "Tax ID": "12345",
    "PartyID": "1"

  }
}

`

【问题讨论】:

  • 你试过了吗?如果是,您的问题是什么?
  • 首先检查map是否已经包含该密钥
  • 1.检查密钥是否存在; 2.如果是,获取值并进行处理; 3.如果没有,添加新值。
  • 非常感谢我的answer 中的反馈。

标签: java json hashmap


【解决方案1】:

Guava 附带Multimap<K, V>。这正是您正在寻找的:

将键映射到值的集合,类似于Map,但其中每个键可能与多个值相关联。您可以将多重映射的内容可视化为从键到非空值集合的映射:

  • a → 1, 2
  • b → 3

...或作为单个“扁平化”键值对集合:

  • a → 1
  • a → 2
  • b → 3

如果您想使用Jackson,这是一种流行的 Java JSON 解析器,请执行以下操作:

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new GuavaModule());
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);

Multimap<String, Object> data =
        mapper.readValue(json, new TypeReference<Multimap<String, Object>>() {});

一些相关细节:

需要以下依赖项:

<!-- Guava -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>${guava.version}</version>
</dependency>

<!-- Jackson Core -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>${jackson.version}</version>
</dependency>

<!-- Jackson Databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${jackson.version}</version>
</dependency>

<!-- Jackson module for Guava integration -->
<dependency>
  <groupId>com.fasterxml.jackson.datatype</groupId>
  <artifactId>jackson-datatype-guava</artifactId>
  <version>${jackson.version}</version>
</dependency>

要将地图转换回 JSON 文档,请使用:

String output = mapper.writeValueAsString(data);

【讨论】:

    【解决方案2】:

    首先检查map 是否已经包含该密钥,如果是,则添加它。

    如果你使用类似HashMap&lt;String, List&lt;YourObject&gt;&gt;:

    if (map.containsKey(key)) {
        map.get(key).add(yourObject);
    }
    

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-09
      • 2016-07-05
      • 1970-01-01
      • 2019-04-12
      相关资源
      最近更新 更多