Как удалить дубликат пары ключ-значение в 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 ответа:
Из метода набора java добавьте документацию :
Добавляет указанный элемент e к этому набору, если набор не содержит элемента e2 такого, что (e= = null ? e2= = null: e. equals (e2))
Когда вы добавляете свои элементы в набор, они, вероятно, не считаются равными.
Вероятно, вам нужно проверить хэш-код и метод equals вашего объекта API и переопределить их.
Это очень легко сделать в TDD.
Хэш-код используется при использовании хэш-набора (что и является вашим случаем).
Также смотрите этот вопрос о методах hashSet и equals