我的猜測是,你的代碼如下所示:
ArrayList<Person> people = ...;
people.sort();
看的JavaDoc爲ArrayList
。你看到一個方法public void sort()
(沒有參數)? 否 - 沒有這樣的方法。
這就是錯誤的含義: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個lambda表達式很簡單:
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