1

我有一个ArrayListBean ArrayList,我需要ArrayList根据dateBean 中的变量对其进行排序。

ArrayList<ArrayList<DriverLogDatePair>> driverLogList

并且DriverLogDatePairbean 有一个变量DateTime date,它也有一个compareTo方法。

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

但我无法排序driverLogList

4

4 回答 4

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

但我不知道这种比较的真正含义。这是一个语义问题,这真的是你想要的吗?

于 2012-10-31T08:51:27.370 回答
0

问题是,如果您对它进行排序driverLogList,它会尝试比较包含的ArrayList对象。我会为该列表编写一个包装器:

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

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

然后你可以这样使用它并对其进行排序:

ArrayList<DriverLogDatePairList> driverLogList;
于 2012-10-31T08:49:51.300 回答
0

通常,您可以List使用排序 s

Collections.sort( list , comparator )

因此,假设您要对内部列表进行排序,在实现了合适的比较器之后,遍历外部列表并使用该构造对元素进行排序:

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

干杯,

于 2012-10-31T08:50:27.740 回答
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;
}
于 2012-10-31T08:50:48.510 回答