【问题标题】:Java sort List <SqlRow> by date as StringJava 按日期对列表 <SqlRow> 排序为字符串
【发布时间】:2015-04-14 14:59:27
【问题描述】:

我有一个来自 Type 的列表,我想按日期元素对这个列表进行排序。我用谷歌搜索,我看到了一些具有可比性的解决方案,但是是否有可能在不实现我的类中的接口的情况下做到这一点? 我的列表如下所示: 列表[{id=33, text=test1, date=06.02.15}, {id=81, text=test2, date=10.01.15}] 现在我想比较这两个元素,并想按日期降序排列它们。但日期也在字符串中。 你有什么想法吗?

非常感谢您。

【问题讨论】:

  • 在标题中您说的是 SqlRows 列表。我猜它们来自数据库,那你为什么不直接在查询中对它们进行排序呢?
  • 你可以使用 Collections.sort() 方法。它接受不可比较的项目列表和 Comparator 对象。您只需实现 Comparator 而不实现 Comparable 接口
  • @StephaneM 你是对的,它们来自数据库。问题是日期也在数据库中存储为varchar2。我尝试将其实现为日期,但我遇到了太多错误和麻烦。这样使用 varchar2 会更有意义。

标签: java string list sorting date


【解决方案1】:
Collections.sort(Type, new Comparator<Type>() {
    @Override
    public int compare(Type o1, Type o2) {
          SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd h:m");
          Date d1 = sdf.parse(o1.date);
          Date d2 = sdf.parse(o2.date);
          return d1.compareTo(d2);
      }
  });

【讨论】:

  • @NeerajJain 不是Comparable 而是Comparator
  • 你能告诉我这里是什么类型吗?我的列表如下所示: List rows = Ebean.createSqlQuery(sql).findList();
  • @user3725212 然后使用Collections.sort(rows, new Comparator&lt;SqlRow&gt;() { ... });。我认为与 List&lt;SqlRow&gt; 合作不是一个好主意,但您正在使用的应用程序可能就是这样设计的。
  • 他的日期存储在 varchar2 中,所以比较器会失败
  • 我可以给出的一个快速答案是将数据存储在 varchar2 中,日期为 long {java.util.Date.getTime()}
【解决方案2】:

因此,如果日期存储在 varchar2 中而不是首先将它们转换为实际的 Date 对象,

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd h:m");
System.out.println(sdf.parse(dateFromDataBase));

然后对日期对象进行比较

if(date1.compareTo(date2)>0){
// Do whatever you want to do 
}

现在对List&lt;SqlRow&gt;进行排序

您可以使用 @Srinivasu Talluri 提到的comparator Interface 但是,如果您对使用这些从字面上使您的生活更轻松的界面不感兴趣,那么您可以使用bubble sortInsertion sort 并在上面提到的dates 的基础上进行比较

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多