Я думаю, что ваш код выглядит следующим образом:
ArrayList<Person> people = ...;
people.sort();
Посмотрите на JavaDoc для ArrayList
. Вы видите метод public void sort()
(без параметров)? No - такого метода нет.
Это смысл ошибки: The method sort(Comparator) in the type ArrayList is not applicable for the argument()
- Есть метод sort(Comparator)
, но вы не указали подходящие параметры.
Предполагая Person
реализует Comparable
(и, следовательно, имеет метод compareTo()
), вы можете использовать Collections.sort()
, рассортировывающую произвольное List<Comparable>
Collections.sort(people);
Это потому, что Collections
имеет статический метод:
static <T extends Comparable<? super T>> void sort(List<T> list);
(он также имеет sort(List<T> list, Comparator<T> comparator)
)
...или вы можете передать компаратор List.sort()
, что довольно легко с Java 8 лямбды:
people.sort((a,b) -> a.compareTo(b));
(Или, если вы предпочитаете старый стиль):
people.sort(new Comparator<String>() {
@Override
public int compare(String a, String b) {
return a.compareTo(b);
}
});
(На самом деле, как в Java 8, этот компаратор предоставляется стандартной библиотекой, так как Comparator.naturalOrder()
)
Точка компараторов заключается в том, что вы можете сортировать в соответствии с различными критериями. Например:
people.sort((a,b) -> a.lastName().compareTo(b.lastName()));
people.sort((a,b) -> a.lastName().compareToIgnoreCase(b.lastName()));
people.sort((a,b) -> Integer.compare(a.age(),b.age()));
// etc.
... или методы, использующие в Comparator
:
people.sort(Comparator.comparing(Person::lastName));
people.sort(Comparator.comparing(Person::lastName)
.thenComparing(Person::firstName));
Что 'Comparator' ты проходишь? Не могли бы вы поделиться каким-то кодом? – Mureinik
вместо этого используйте 'Collections.sort'. Сам ArrayList не знает, как сортировать без компаратора. – njzk2