При сравнении двух объектов в Java я настоятельно рекомендую разрешить объекту реализовать Comparator (или Comparable
). По моему мнению, это лучший способ сравнения двух объектов в Java.
Позволяя вашему классу Country реализовать Comparator<Country>
, вы можете создать новый пользовательский метод сравнения в своем классе. Интерфейс Comparator
содержит абстрактный метод compare(T o1, T o2)
, который будет унаследован в вашем классе Country.
class Country implements Comparator<Country>
{
private String name;
private int area;
public Country(String name, int area)
{
this.name = name;
this.area = area;
}
public int compare(Country c1, Country c2) { //inherited from Comparator interface
if(c1.area > c2.area) { //returns -1 if c1.area > c2.area
return -1;
} else {
return 1; //returns 1 if c1.area < c2.area or c1.area == c2.area
}
}
}
Причина, по которой реализация компаратора для вашего объекта превосходит все, заключается в том, что теперь вы можете использовать Arrays.sort
метод для сортировки массива, содержащего Country
объекты, согласно пользовательскому методу сравнения в классе Country
.
При использовании Arrays.sort(countries)
, содержащем {("Uruguay", 176220), ("Thailand", 514000), "Belgium", 30510}
, будет отсортирован массив по {("Thailand", 514000),("Uruguay", 176220),("Belgium", 30510)}
.
Обратите внимание, что ваш массив содержит объекты Country, содержащие указанную выше информацию, и фактически не содержит кортежей (записал это так, чтобы сделать его более наглядным).
Теперь вы можете просто получить объект страны с максимальной площадью на Country max = countries[0];
.
Внедрив Comparator, вы избегаете многозначности кода в l oop (это может иметь большое значение, если вам нужно сравнивать ваш объект в разных местах в вашей программе).
Теперь ваш максимальный метод содержит только две строки кода.
public static Country maximum(Country[] countries) {
Arrays.sort(countries);
return countries[0];
}