第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

按屬性排序自定義對(duì)象的ArrayList

按屬性排序自定義對(duì)象的ArrayList

函數(shù)式編程 2019-05-22 14:03:14
按屬性排序自定義對(duì)象的ArrayList我讀到了使用Comparator對(duì)ArrayLists進(jìn)行排序,但在所有人們使用的例子中compareTo,根據(jù)一些研究,這是一個(gè)字符串的方法。我想通過(guò)它們的一個(gè)屬性對(duì)自定義對(duì)象的ArrayList進(jìn)行排序:Date對(duì)象(getStartDay())。通常我會(huì)比較它們item1.getStartDate().before(item2.getStartDate())所以我想知道我是否可以這樣寫:public class CustomComparator {     public boolean compare(Object object1, Object object2) {         return object1.getStartDate().before(object2.getStartDate());     }}public class RandomName {     ...     Collections.sort(Database.arrayList, new CustomComparator);     ...}
查看完整描述

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));

所有這些都是等效的形式。


查看完整回答
反對(duì) 回復(fù) 2019-05-22
?
FFIVE

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());

    }

});


查看完整回答
反對(duì) 回復(fù) 2019-05-22
?
森欄

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);

集合類包含了一些這些有用的,常用工具。


查看完整回答
反對(duì) 回復(fù) 2019-05-22
?
湖上湖

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)


查看完整回答
反對(duì) 回復(fù) 2019-05-22
  • 5 回答
  • 0 關(guān)注
  • 676 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)