1

ステータスレポートを日付で並べ替える必要があります。addItemメソッドを呼び出す前に、並べ替えを行うか、レポートの日付ごとに以前のレポートと比較する必要があります。ステータスレポートのレポート日付を取得するには、getReportDate()[タイプはJVDate]メソッドを使用できることに注意してください。ステータスレポートの並べ替えを手伝っていただけませんか。

   public void  doImport( TRDataReader in )
        throws IOException, TRException        
   {

       in.start( getClassTag() ); // get the class tag
       // import the set's flags from a datareader
       importFlags( in ); 
       beginLoad ();
       final String restag = new TRStatusReport().getClassTag ();
       while (in.nextToken (restag))  {
             addItem (new TRStatusReport (in));
       }
       endLoad ();
       in.end (getClassTag ());
   }
4

1 に答える 1

2

適切なコンパレータを指定して、Java の組み込みソート アルゴリズムを使用するだけです。次のようなもの:

public void  doImport(TRDataReader in) throws IOException, TRException {
    in.start(getClassTag()); // get the class tag
    importFlags(in); // import the set's flags from a datareader

    // Add the reports to a temporary list first.
    final String restag = new TRStatusReport().getClassTag();
    List<TRStatusReport> list = new ArrayList<TRStatusReport>();
    while (in.nextToken(restag)) {
        list.add(new TRStatusReport(in));
    }         

    // Now sort them.
    TRStatusReport[] array = list.toArray(new TRStatusReport[]{});
    Collections.sort(array, new Comparator<TRStatusReport>() {
        @Override
        public int compare(TRStatusReport o1, TRStatusReport o2) {
            return o1.getReportDate().compareTo(o2.getReportDate());
        }
    });

    // Add it to the internal list.
    beginLoad();
    for (int i = 0; i < array.length; i++) {
        addItem(array[i]);
    }
    endLoad();
    in.end( getClassTag() );
}

日付が Java Date オブジェクトでない場合は、日付を比較する方法を見つける必要があります。私はこのコードをやみくもに (オブジェクトが何であるかはわかりません)、いくつかの仮定を置いて書きました。たとえば、beginLoad() メソッドと endLoad() メソッドは... リスト用ですか、それとも読み取り用ですか? ...その場合、オブジェクトがロードされて一時リストに追加される while 句の前後に配置する必要がある場合があります。

于 2012-05-13T06:36:20.563 に答える