【问题标题】:how to sort on a string date on a collection of objects如何对对象集合上的字符串日期进行排序
【发布时间】:2022-01-12 00:29:03
【问题描述】:

所以我很难记住语法。我有一个我试图根据日期值排序的对象列表。对象看起来像这样。

Public class someobject{
    private String author;
    private String createDate;
    private String subject;
    private String body;
    private String claimNumber;
    private String authoringDate;
}

我正在尝试对 createDate 值进行排序。类似的东西

List<someObject> someObjectList = new ArrayList<>();

someObjectList.sort()

当前字符串到达​​ createDate 对象的方式是 YYYY/MM/DD。

【问题讨论】:

  • 如果你把它当作字符串来处理,它不会起作用吗? 2011/12/31 将早于 2012/12/31。
  • someObjectList.sort(Comparator.comparing(someobject::getCreateDate));
  • @MuhammadGulfam 目前它是一个字符串,这是遗留代码,但我需要根据该日期对该列表进行排序。我确定有一个流,我可以将其转换为日期时间,然后根据它进行排序。
  • 最好的解决方案是将该值存储为 LocalDate 而不是字符串。

标签: java list sorting arraylist


【解决方案1】:

YYYY/MM/DD 格式的日期可以正确排序为字符串,即按字典顺序,所以:

someObjectList.sort(Comparator.comparing(someobject::getCreateDate));

或者,如果您没有 createDate 的 getter 方法:

someObjectList.sort(Comparator.comparing(o -> o.createDate));

【讨论】:

    【解决方案2】:

    为了获得正确的比较结果,您必须将“creationDate”字段中的字符串值转换为日期或本地日期,而不是像这样制作比较器:

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY/MM/DD");
    someObjectList.sort(Comparator.comparingLong(ob -> formatter.parse(ob.createDate).get(ChronoField.EPOCH_DAY)));
    

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY/MM/DD");
    someObjectList.sort(Comparator.comparingLong(ob -> LocalDate.parse(ob.createDate, formatter).atStartOfDay(ZoneId.systemDefault()).toEpochSecond()));
    

    【讨论】:

      猜你喜欢
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-29
      • 1970-01-01
      • 2020-11-11
      相关资源
      最近更新 更多