簡體   English   中英

需要對ArrayList進行排序 <Object> 特定領域?

[英]Need to do sorting of ArrayList<Object> for a particular field?

我需要根據學生對象中的日期對我的ArrayList進行排序...如果日期(加入日期)相同,那么我需要根據ID對其進行排序...該怎么做?

這可以通過兩種常見方式完成。

簡單的方法

1)讓學生提供可比較的實施,最終將推遲至該日期。 這是一個非常簡單的操作,但是有點麻煩。

可維護的方式

2)另外,Collections.sort方法將Comparator作為輸入-您可以輕松地編寫一個自定義比較器,該實現將輸入轉換為Student類並直接返回數據比較,從而實現排序所需的比較。

第二種解決方案具有更高的模塊化和可維護性,除非按日期進行比較是應用程序的基本,核心方面。

在學生班級中實現可比接口。 然后使用Collections.sort(list);

您可以執行以下操作:

使類實現Comparable

public class Student implements Comparable<Student> {
    private Date joinDate;
    private String id;

    //...

    @Override
    public int compareTo(Student o) {
        int result = joinDate.compareTo(o.joinDate);
        if(result != 0) {
            return result;
        }
        return id.compareTo(o.id);
    }    
}

或使用Comparator

Comparator<Student> comparator = new Comparator<Student>() {

    @Override
    public int compare(Student o1, Student o2) {
        int result = o1.getJoinDate().compareTo(o2.getJoinDate());
        if (result != 0) {
            return result;
        }
        return o1.getId().compareTo(o1.getId());
    }
};

Collections類具有將Comparator作為參數的sort方法:

List<Student> students;

/* ...students list instantiated and populated somewhere along here... */

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

    @Override
    public int compare(Student student1, Student student2) {
        return student1.joinDate().compareTo(student2.joinDate());
    }
});

我應該補充一點,如果您的列表確實被聲明為Object通用的,那么您將不得不進行大量的轉換。 該列表應聲明為Student通用,並且您應具有其他非學生對象列表。

您可以通過以下兩種方式之一執行此操作:

1)在您的對象上實現Comparable接口,然后調用`Collections.sort(yourList);'。

要么

2)實施比較接口的新類(讓我們假設你調用該類StudentDateComparator 。然后你可以的調用Collections.sort(yourList,新StudentDateComparator());`。

我通常更喜歡后者,因為它使我可以將排序代碼與要排序的數據對象分開。

  1. 如果Student類基於ID字段實現Comparable,則將Collections.sort()與列表一起用作單個參數。

  2. 否則,實現一個Comparator,該Comparator使用對象的ID比較對象,並將其用作Collections.sort()的第二個參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM