5 回答
TA貢獻1818條經驗 獲得超3個贊
自從Date實現以來Comparable,它有一個compareTo類似的方法String。
所以你的自定義Comparator可能如下所示:
public class CustomComparator implements Comparator<MyObject> {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}}該compare()方法必須返回一個int,所以你無法直接返回boolean你計劃的那樣。
你的排序代碼就像你寫的那樣:
Collections.sort(Database.arrayList, new CustomComparator());
如果你不需要重用你的比較器,寫一個稍微短一點的方法是將它寫成內聯匿名類:
Collections.sort(Database.arrayList, new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}});自java-8
您現在可以使用lambda表達式以更短的形式編寫最后一個示例Comparator:
Collections.sort(Database.arrayList, (o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
并且List有一個sort(Comparator)方法,所以你可以進一步縮短它:
Database.arrayList.sort((o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
這是一個常見的習慣用法,有一個內置的方法來生成一個Comparator帶有Comparable鍵的類:
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
所有這些都是等效的形式。
TA貢獻1797條經驗 獲得超6個贊
對于排序,ArrayList您可以使用以下代碼段:
Collections.sort(studList, new Comparator<Student>(){
public int compare(Student s1, Student s2) {
return s1.getFirstName().compareToIgnoreCase(s2.getFirstName());
}
});
TA貢獻1810條經驗 獲得超5個贊
是的你可以。比較項目有兩個選項:Comparable接口和Comparator接口。
這兩種接口都允許不同的行為。Comparable允許您使對象的行為與您剛剛描述的Strings一樣(事實上,String實現了Comparable)。第二個,比較器,允許你做你想要做的事情。你會這樣做:
Collections.sort(myArrayList, new MyComparator());
這將導致Collections.sort方法將比較器用于它的排序機制。如果ArrayList中的對象具有可比性,則可以執行以下操作:
Collections.sort(myArrayList);
該集合類包含了一些這些有用的,常用工具。
TA貢獻2003條經驗 獲得超2個贊
JAVA 8 lambda表達式
Collections.sort(studList, (Student s1, Student s2) ->{
return s1.getFirstName().compareToIgnoreCase(s2.getFirstName());
});
要么
Comparator<Student> c = (s1, s2) -> s1.firstName.compareTo(s2.firstName);
studList.sort(c)
添加回答
舉報
