2016-09-29 3 views
-1

позволяет сказать, что у меня есть 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); 
    } 
} 

ответ

2

При реализации метода Equals вам также необходимо реализовать метод Hashcode тоже.

Существует что-то называется хэш-код - равно контракт, оба должны быть реализованы для вашего HashMap работать,

Ответ here объясняет это хорошо.

Смежные вопросы