2012-10-31 168 views
1

我有一個ArrayList的Bean的ArrayList,我需要根據Bean中的date變量對這個ArrayList進行排序。Bean的Arraylist的排序Arraylist

ArrayList<ArrayList<DriverLogDatePair>> driverLogList 

而且DriverLogDatePair豆具有可變DateTime date,它也有一個compareTo方法。

public int compareTo(DriverLogDatePair o) { 
    return date.compareTo(o.date); 
} 

但我無法排序driverLogList

+1

請張貼您的代碼。 – Aubin

+0

你想排序哪個'ArrayList',內部還是外部?你有一個列表的列表,你想排序內部列表中的日期元素,所以我假設你想排序內部列表 - 或什麼? –

+0

如何對ArrayList 進行排序?你也需要提供比較。 –

回答

3

你必須填寫此代碼:

ArrayList<ArrayList<DriverLogDatePair>> driverLogList = new ArrayList<>(); 
Collections.sort(driverLogList, new Comparator<ArrayList<DriverLogDatePair>>(){ 
    @Override public int compare(
     ArrayList<DriverLogDatePair> left, 
     ArrayList<DriverLogDatePair> right) 
    { 
     return 0; 
    }}); 

因爲第一個數組包含一個包含Comparable的數組。 您提供的比較是DriverLogDatePair不是ArrayList的< DriverLogDatePair>

(...之後這篇文章的評論...)

您的要求,完成了比較,我建議:

int size = left.size(); 
int diff = size - right.size(); 
if(diff != 0) return diff; 
for(int i = 0; i < size; ++i) { 
    diff = left.get(i).compareTo(right.get(i)); 
    if(diff != 0) return diff; 
} 

但我不知道這個比較的真正含義。 這是一個語義問題,這真的是你想要的嗎?

+0

奧賓可以請你告訴我我需要放在這裏面。我的意思是我將如何在這裏比較。 – vikas27

+0

Aubin的我用您的代碼並增加了對(INT I = 0; I vikas27

0

問題是,如果你排序driverLogList它會嘗試比較包含的ArrayList對象。我會寫該列表的包裝:

public class DriverLogDatePairList extends ArrayList<DriverLogDatePair> implements Comparable<DriverLogDatePairList> { 

    public int compareTo(DriverLogDatePairList o) { 
     //your comparison criteria 
    } 
} 

然後你就可以使用這種方式和排序是:一般

ArrayList<DriverLogDatePairList> driverLogList; 
0

,您可以使用

Collections.sort(list , comparator) 

所以排序List小號,假設你想對內部列表進行排序,遍歷外部列表並使用該構造對元素進行排序,然後執行擬合比較器:

Comparator comparator = 
    new Comparator<DateTime>() 
    { 
     @Override 
     public int compare(DateTime o1, DateTime o2) 
     { 
      return o1.compareTo(o2); 
     } 
    } 

乾杯,

0

你比較方法似乎是錯誤的我..

它應該是這樣的: (這裏我假設日期DriverLogDatePair對象)

public int compareTo(DriverLogDatePair o) { 
    if(date.date < o.date) return -1; 
    else if (date.date < o.date) return 0; 
    else return 1; 
}