1

ArrayListof Beanがあり、Bean の変数に従ってArrayListこれをソートする必要があります。ArrayListdate

ArrayList<ArrayList<DriverLogDatePair>> driverLogList

DriverLogDatePairビーンには変数があり、メソッド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 を含む配列が含まれているためです。あなたが提供するコンパレータは、ArrayList < DriverLogDatePair >ではなく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

The problem is that if you sort driverLogList it tries to compare the contained ArrayList objects. I would write a wrapper for that list:

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

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

Then you can use it this way and sort it:

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

Generally, you can sort Lists using

Collections.sort( list , comparator )

So, assuming you want to sort the inner lists, iterate through the outer list and use that construct to sort the elements, after having implemented a fitting comparator:

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

Cheers,

于 2012-10-31T08:50:27.740 に答える
0

あなたの比較方法は私には間違っているようです..

次のようにする必要があります: (ここでは、日付を DriverLogDatePair Object と想定しています)

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 に答える