亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

按屬性排序自定義對象的ArrayList

按屬性排序自定義對象的ArrayList

函數式編程 2019-05-22 14:03:14
按屬性排序自定義對象的ArrayList我讀到了使用Comparator對ArrayLists進行排序,但在所有人們使用的例子中compareTo,根據一些研究,這是一個字符串的方法。我想通過它們的一個屬性對自定義對象的ArrayList進行排序:Date對象(getStartDay())。通常我會比較它們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貢獻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));

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


查看完整回答
反對 回復 2019-05-22
?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

對于排序,ArrayList您可以使用以下代碼段:


Collections.sort(studList, new Comparator<Student>(){

    public int compare(Student s1, Student s2) {

        return s1.getFirstName().compareToIgnoreCase(s2.getFirstName());

    }

});


查看完整回答
反對 回復 2019-05-22
?
森欄

TA貢獻1810條經驗 獲得超5個贊

是的你可以。比較項目有兩個選項:Comparable接口和Comparator接口。

這兩種接口都允許不同的行為。Comparable允許您使對象的行為與您剛剛描述的Strings一樣(事實上,String實現了Comparable)。第二個,比較器,允許你做你想要做的事情。你會這樣做:

Collections.sort(myArrayList, new MyComparator());

這將導致Collections.sort方法將比較器用于它的排序機制。如果ArrayList中的對象具有可比性,則可以執行以下操作:

Collections.sort(myArrayList);

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


查看完整回答
反對 回復 2019-05-22
?
湖上湖

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)


查看完整回答
反對 回復 2019-05-22
  • 5 回答
  • 0 關注
  • 683 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號