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()
).
Виртуальный выделенный сервер (VDS) становится отличным выбором
Возможно ли в такой цепочке реализовать RecyclerView при такой вложенностиИ как нужно осуществлять транзакции?
Полистав страницы интернета "молодой падаван" понял что любую графику рисуют в новом классе наследуемом от View и создают объект в классе Draw2d...