5 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊
自從Date
實(shí)現(xiàn)以來(lái)Comparable
,它有一個(gè)compareTo
類似的方法String
。
所以你的自定義Comparator
可能如下所示:
public class CustomComparator implements Comparator<MyObject> { @Override public int compare(MyObject o1, MyObject o2) { return o1.getStartDate().compareTo(o2.getStartDate()); }}
該compare()
方法必須返回一個(gè)int
,所以你無(wú)法直接返回boolean
你計(jì)劃的那樣。
你的排序代碼就像你寫的那樣:
Collections.sort(Database.arrayList, new CustomComparator());
如果你不需要重用你的比較器,寫一個(gè)稍微短一點(diǎn)的方法是將它寫成內(nèi)聯(lián)匿名類:
Collections.sort(Database.arrayList, new Comparator<MyObject>() { @Override public int compare(MyObject o1, MyObject o2) { return o1.getStartDate().compareTo(o2.getStartDate()); }});
自java-8
您現(xiàn)在可以使用lambda表達(dá)式以更短的形式編寫最后一個(gè)示例Comparator
:
Collections.sort(Database.arrayList, (o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
并且List
有一個(gè)sort(Comparator)
方法,所以你可以進(jìn)一步縮短它:
Database.arrayList.sort((o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
這是一個(gè)常見(jiàn)的習(xí)慣用法,有一個(gè)內(nèi)置的方法來(lái)生成一個(gè)Comparator
帶有Comparable
鍵的類:
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
所有這些都是等效的形式。

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
對(duì)于排序,ArrayList您可以使用以下代碼段:
Collections.sort(studList, new Comparator<Student>(){
public int compare(Student s1, Student s2) {
return s1.getFirstName().compareToIgnoreCase(s2.getFirstName());
}
});

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊
是的你可以。比較項(xiàng)目有兩個(gè)選項(xiàng):Comparable接口和Comparator接口。
這兩種接口都允許不同的行為。Comparable允許您使對(duì)象的行為與您剛剛描述的Strings一樣(事實(shí)上,String實(shí)現(xiàn)了Comparable)。第二個(gè),比較器,允許你做你想要做的事情。你會(huì)這樣做:
Collections.sort(myArrayList, new MyComparator());
這將導(dǎo)致Collections.sort方法將比較器用于它的排序機(jī)制。如果ArrayList中的對(duì)象具有可比性,則可以執(zhí)行以下操作:
Collections.sort(myArrayList);
該集合類包含了一些這些有用的,常用工具。

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊
JAVA 8 lambda表達(dá)式
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)
添加回答
舉報(bào)