2012-10-31 105 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; 
}