Нет необходимости реализовывать Comparable
и переопределять метод compareTo
, просто используйте Comparator
Comparator<Employee> c = Comparator.comparing(Employee::getName)
.thenComparing(Employee::getAge)
.thenComparing(Employee::getExp);
И использование Collections.sort()
для сортировки списка с использованием переданного Comparator
Collections.sort(eList,c);
При использовании Comparable
Проблема в том, что age
и exp
имеют тип int
, который является примитивным, если вы не можете использовать метод compareTo
, измените их тип на Integer
объект-оболочку или используйте Integer.compare(int a, int b)
метод
private int age; // to private Integer age
private int exp; // to private Integer exp
Так что вы можете использовать compareTo
на age
и exp
this.getAge().compareTo(o.getAge());
this.getExp().compareTo(o.getExp());
Если не смотреть на мое решение ниже, используя Integer.compare(int a, int b)
решение
@Override
public int compareTo(Employee o) {
int result = this.getName().compareTo(o.getName());
if (result == 0) {
result = Integer.compare(this.getAge(), o.getAge());
if (result == 0) {
return Integer.compare(this.getExp(), o.getExp());
}
return result;
}
return result;
}