Как добавить значение ключа к другому в Hash Map, если есть дубликаты ключей - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь поместить данные 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 могут быть дубликаты ключей типа «Врач».

Я хочу добавить значение второго «врача» к первому «Врачу» без переопределения его значения и удалить дубликат ключа. например: `

   {

"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"

  }
}

`

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Сначала проверьте, содержит ли map этот ключ, и если да, добавьте его.

Если вы используете что-то вроде HashMap<String, List<YourObject>>:

if (map.containsKey(key)) {
    map.get(key).add(yourObject);
}
0 голосов
/ 02 июля 2018

Гуава поставляется с Multimap<K, V>. Это именно то, что вы ищете:

Коллекция, которая отображает ключи на значения, аналогичные Map, но в которых каждый ключ может быть связан с несколькими значениями. Вы можете визуализировать содержимое мультикарты как карту от ключей до непустых наборов значений:

  • a → 1, 2
  • b → 3

... или как единый "сплющенный" набор пар ключ-значение:

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

Если вы хотите использовать Джексон , популярный анализатор JSON для Java, выполните следующие действия:

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>>() {});

Некоторые важные данные:

  • GuavaModule - это модуль сбора данных Джексона для поддержки гуавы типов.

  • Включив ACCEPT_SINGLE_VALUE_AS_ARRAY, Джексон будет выполнять автоматическое преобразование значений не-JSON-массивов в одноэлементные массивы, что необходимо для анализа JSON как Multimap<K, V>.

Требуются следующие зависимости:

<!-- 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...