Map
s в Java следует указывать в значениях, которые equals
определены для всех их «основных свойств». Я полагаю, что большинство библиотек коллекций работают так, и единственный пример, который приходит на ум, - это пример Telescript от General Magi c.
Итак, Map
определено для типа только этих свойств , field1
int
(Integer
) в этом случае. Поместите остальную информацию в значение записи карты. Вполне возможно, это новый класс.
Map<Integer, ValueClass> map;
, где
public final class ValueClass {
private int someValue;
private ExampleClass exmaple;
...
Если вы настойчивы, вы хотите найти ключ, который, я полагаю, вам не нужен. Существуют различные способы сделать это, что-то вроде:
Optional<ExampleClass> found = map.keySet().stream()
.firstThat(k -> k.field1() == target);
found.ifPresent(key -> {
Integer value = hmap.remove(key);
// update key.
hmap.put(key, value);
});
Или версия старой школы (выглядит лучше для меня, но не так круто):
for (ExampleClass key : map.keySet()) {
if (key.field1() == target) {
Integer value = hmap.remove(key);
// update key.
hmap.put(key, value);
}
}
Использование Iterator
или, возможно, набор входных данных лучше, так как он избегает второго из трех поисков, но я оставлю это как упражнение.