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 回答