【问题标题】:sort list of start date and end date in javajava中开始日期和结束日期的排序列表
【发布时间】:2026-01-25 04:15:02
【问题描述】:

我有开始日期和结束日期。如何排序。 这是我的尝试,但它只适用于一个日期列表

String sorted_date = "";
  String from_date="";
  List<String> listDates = new ArrayList<String>();
  for (int i = 0; i < leaveTransactionDetail.size(); i++) {
  if (leaveTransactionDetail.get(i).get("from_date").toString().trim().equals("0000-00-00")) {
      sorted_date = leaveTransactionDetail.get(i).get("to_date").toString().trim();

        } else {
          sorted_date = leaveTransactionDetail.get(i).get("from_date").toString().trim();
       
          }
          listDates.add(sorted_date);
    }
          Collections.sort(listDates);

          out.println("After sorting: " + listDates);

这是我的桌子

我希望输出日期按排序顺序

【问题讨论】:

  • 实际输出是多少?你的代码有什么问题?
  • 将日期保存为字符串吗?一般来说,如果您使用特定于时间的类型,例如,使用时间信息会更容易。本地日期。 (也就是说,ISO-8601 日期已经可以排序了……正如 Elikill58 所说,目前出了什么问题?)
  • 我是否正确理解您应该对它们进行独立排序,或者它们应该按交替顺序排序?如果后者是原因,您可能希望将两者合并到一个列表中,然后将它们拆分

标签: java jsp


【解决方案1】:

对我来说,你必须使用一个新对象。

public class DateStartEnd implements Comparable {
        public String start, end;

        public DateStartEnd(String start, String end) {
            this.start = start;
            this.end = end;
        }
        
        public String getStart() {
            return start;
        }
        
        public String getEnd() {
            return end;
        }
        
        @Override
        public String toString() {
            return "Start:" + start + ",End:" + end; // here it's just to check result, such as I test with different year, it's "showable" for me
        }

        @Override
        public int compareTo(Object o) { // method from comparable interface
            if(!(o instanceof DateStartEnd))
                return 0; // if it's not good object type
            DateStartEnd other = (DateStartEnd) o; // cast to current one
            return getStart().compareTo(other.getEnd()); // compare date between current and next
        }
}

然后现在我们创建自己的对象并比较它们:

List<DateStartEnd> dates = new ArrayList<>();
for (int i = 0; i < leaveTransactionDetail.size(); i++) {
   // get from and to dates
   String fromDate = leaveTransactionDetail.get(i).get("from_date").toString().trim();
   String toDate = leaveTransactionDetail.get(i).get("to_date").toString().trim();
   dates.add(new DateStartEnd(fromDate, toDate)); // add to all dates
}

Collections.sort(dates); // this will use the compare method, define in the object thanks to "Comparable" interface

System.out.println("After sorting: " + dates); // print result

【讨论】:

  • 不,它仍然只对一个日期列表进行排序...我必须按排序顺序一起显示开始日期和结束日期。
  • 好的,但你能在输入/输出的主要帖子中举个例子吗?因为我不知道我们如何同时对 2 个进行排序,所以对我来说,你必须创建一个新对象
  • 谢谢,太好了。我只是编辑我的答案,它对我有用
  • 它显示结果为排序后:[开始:-1898,结束:121,开始:121,结束:121,开始:121,结束:121,开始:121,结束:121,开始:121,结束:121,开始:121,结束:121,开始:121,结束:-1898]
  • 因为DateStartEndtoString()方法,可以编辑。另外,我会尽量保留字符串,也许对你会更好(排序后)
最近更新 更多