У меня есть простой класс, который содержит строку (имя) и целое число (возраст). Объекты, которые должны храниться в коллекции, не должны иметь двойных именных значений и сортироваться в соответствии с возрастами возраста. Первый пример кода удаляет все двойные имена, но не содержит второй критерий заказа:Компаратор Java: два критерия заказа
public int compare(Person p1, Person p2) {
int reVal = 1;
if(p1.getName().compareTo(p2.getName()) != 0){
reVal = 1;
}
else {
reVal = 0;
}
return reVal;
}
Следующий пример компаратор прикажу остальное множество объектов, которые не содержат каких-либо двойных имен:
public int compare(Person p1, Person p2) {
boolean ageGt = (p1.getAge() > p2.getAge());
int reVal = 1;
if(p1.getName().compareTo(p2.getName()) != 0){
if(scoreGt)
reVal = -1;
else
reVal = 1;
}
else {
reVal = 0;
}
return reVal;
}
Второй компаратор упорядочивает объекты в соответствии с их возрастными значениями правильно, но он допускает двойные имена, которые я не понимаю, поскольку внешний if-statement уже проверен, если имена обоих объектов равны. Почему это происходит?
Что вы имеете в виду под двойным именем? –
@kocko Я думаю, что он означает, что у него не может быть два объекта с тем же именем, поэтому, если они имеют одинаковое имя, они считаются равными. – jazzbassrob
Компаратор _not_ предназначен для проверки на единство. Если вы хотите проверить уникальность имен, вы должны использовать «Карта» с именами в качестве ключей и лиц в качестве значений. – fge