Как удалить дубликат пары ключ-значение в Hashmap? - Не просто дубликат ключа или значения


У меня есть хеш-карта на Java для восстановления API системы программного обеспечения. Итак, у меня есть что-то вроде этого:

[SoftwareID, SoftwareAPI]

Когда я запрашиваю все API для программных систем, я получаю:

[[SoftwareID, SoftwareAPI], [SoftwareID, SoftwareAPI], [SoftwareID, SoftwareAPI]]

Но у меня есть проблема, мне нужно удалить все дубликаты SoftwareAPIs для каждого программного обеспечения.

Например, когда я перебираю свою хэш-карту I get,

[ [0, A], [0, B], [0, A], [0, A] ];

[ [1, A], [1, B], [1, B], [1, C] ];

[ [2, A], [2, B], [2, A] ];

Но мне нужно удалить дублированные пары, так что это будет что-то вроде этого:

[ [0, A], [0, B] ];

[ [1, A], [1, B], [1, C] ];

[ [2, A], [2, B] ]

Просто добавить некоторую информацию кода здесь является частью кода:

// HashMap APIs per user/Systems
HashMap<Integer, Set<API>> apisPerSystem = new HashMap<Integer, Set<API>>();

/**
 * Stores a API in the data model
 * @param system the user
 * @param api the item
 * @return the newly added API
 */
public API addAPIs(int system, String api) {
    API r = new API(system,api);
    apis.add(r);
    Set<API> systemApis = apisPerUser.get(system);
    if (systemApis == null) {
        systemApis = new HashSet<API>();
    }
    apisPerUser.put(system, systemApis);
    systemApis.add(r);
    systems.add(system);
    apisList.add(api);
    return r;
}

// Get the APIs per Systemfrom the outside.
public HashMap<Integer, Set<API>> getAPIsPerSystem() {
    return apisPerSystem;
}
2 3

2 ответа:

Из метода набора java добавьте документацию :

Добавляет указанный элемент e к этому набору, если набор не содержит элемента e2 такого, что (e= = null ? e2= = null: e. equals (e2))

Когда вы добавляете свои элементы в набор, они, вероятно, не считаются равными.

Вероятно, вам нужно проверить хэш-код и метод equals вашего объекта API и переопределить их.

Это очень легко сделать в TDD.

Хэш-код используется при использовании хэш-набора (что и является вашим случаем).

Также смотрите этот вопрос о методах hashSet и equals

Ваш класс API, должен реализовать интерфейс Comparable, так что ваш набор сможет проверить, равны ли 2 API или нет.