позволяет сказать, что у меня есть Employee
-класса с Instant
- и Id
: атрибут поJava HashMap: Как заменить собственный ключ объекта с путы() - метод
public class Employee implements Comparable<Employee> {
private Instant workEnd;
private Integer id;
private String name;
public Instant getWorkEnd() {
return workEnd;
}
public void setWorkEnd(Instant workEnd) {
this.workEnd = workEnd;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Employee employee) {
int workEndCompare = getWorkEnd().compareTo(employee.getWorkEnd());
int idCompare = getId().compareTo(employee.getId());
if (workEndCompare == 0) {
return idCompare;
} else {
return workEndCompare;
}
}
@Override
public String toString() {
return String.format("{Date: %s,Number: %d}", getWorkEnd(), getId());
}
}
Как вы можете видеть каждый Employee
-объект сортируется в зависимости от workEnd
и id
.
Теперь я хочу разместить эти Employee
-Объекты как ключи в HashMap. Но я хочу, чтобы HashMap заменял каждый Key-Employee
на метод put()
, если атрибуты workend
и id
равны. Thta означает, что я хочу нормальное поведение HashMap, но с собственными настраиваемыми объектами как Mapkeys.
Как мне это удается? Внедряя метод равенства?
Я пытался что-то подобное, но это не работает:
@Override
public boolean equals(Object obj) {
if (obj instanceof Employee) {
Employee employee = (Employee) obj;
int workEndCompare = getWorkEnd().compareTo(employee.getWorkEnd());
int idCompare = getId().compareTo(employee.getId());
if ((idCompare + workEndCompare) == 0) {
return true;
} else {
return false;
}
} else {
return super.equals(obj);
}
}