В проекте, где используется класс, который реализует интерфейс Comparator
, чтобы сравнить некоторые сопоставимые объекты, я заметил, что могу разработать класс, который реализует Comparator<>
интерфейс с полями , а затем Override
функцию compare(...)
и использование полей класса для логики функции сравнения.
, поэтому мне придется вызвать функцию сортировки примерно так:
Collections.sort(someArrayList, new SortClass(argument1, argument2));
Мои вопросы:
Насколько часто вы делаете что-то подобное?
Считается ли это хорошим дизайном?
Предполагая, что я получаю пользовательский ввод, который должен изменить логику сравнения между некоторыми объектами, создаваяновый класс-обёртка (с заданными параметрами) будет ли он рассматриваться как лучшее решение в этом отношении?
В соответствии с запросом мой SortClass (я обобщил его в предыдущем разделе, но вот мойреальный класс сортировки):
public class SortHouses implements Comparator<Hotel> {
/** if house1 should be before house2 */
private static final int GT = -1;
/** if house1 should be after house2 */
private static final int LT = 1;
private double latitude;
private double longitude;
public SortHouses(double latitude, double longitude){
this.latitude = latitude;
this.longitude = longitude;
}
@Override
public int compare(House house1, House house2) {
double distHouse1 = Math.sqrt((Math.pow((house1.getLatitude() - latitude), 2) +
Math.pow((house1.getLongitude() - longitude), 2)));
double distHouse2 = Math.sqrt((Math.pow((house2.getLatitude() - latitude), 2) +
Math.pow((house2.getLongitude() - longitude), 2)));
if (distHouse1 < distHouse2){
return GT;
}
if (distHose1 > distHouse2) {
return LT;
}
if (house1.getNum() > house2.getNum()){
return GT;
}
return LT;
}
}