public void sortAmmunitionsByCost() {
System.out.println("*******SORTING BY COST********");
Collections.sort(ammunitions, new Comparator() {
public int compare(Object o1, Object o2) {
Ammunition a1 = (Ammunition) o1;
Ammunition a2 = (Ammunition) o2;
if (a1.getCost() > a2.getCost()) {
return 1;
}
if (a2.getCost() > a1.getCost()) {
return -1;
}
return 0;
}
});
}
Помогите подробно разобрать этот код - я не понимаю здесь в метод вложен метод?
Приведенный вами код более-менее идентичен коду:
public void sortAmmunitionsByCost() {
System.out.println("*******SORTING BY COST********");
Collections.sort(ammunitions, new MyComparator());
}
class MyComparator implements Comparator {
public int compare(Object o1, Object o2) {
Ammunition a1 = (Ammunition) o1;
Ammunition a2 = (Ammunition) o2;
if (a1.getCost() > a2.getCost()) {
return 1;
}
if (a2.getCost() > a1.getCost()) {
return -1;
}
return 0;
}
}
В вашем примере просто приведена укороченная форма его записи, где применяется т.н. анонимный класс, то есть чтобы не городить огород вокруг класса MyComparator, который все равно используется только один раз - применена конструкция с анонимным классом.
Почитайте туториал по анонимным классам
Метод sort в данном случае принимает два аргумента - список ammunitions и компаратор.
В данном случае вы просто не можете сравнить два объекта класса Ammunition одним оператором сравнения (>, <, >=, <=).
Вам необходимо передать функцию, в данном случае compare, в теле которой необходимо реализовать сравнение объектов этого класса. В Вашем коде сравниваются поля cost, путем получения их значений через геттеры (getCost()).
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости