gpt4 book ai didi

java - 按字段的日期对数组对象进行排序

转载 作者:行者123 更新时间:2023-12-01 17:46:13 30 4
gpt4 key购买 nike

我有一个对象 MyTimes ,该对象中有字段 namestart_dateconfiguration

我有一个这个对象的数组,MyTimes [] mytimes

我正在尝试按开始时间对数组进行排序,但正在努力如何进行。

start_time 字段是一个字符串,因此需要转换为日期时间。

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");


for(int i=0; i<mytimes.length; i++) {
Date date = formatter.parse(mytimes[i].getStartTime());
}

然后我可能会将日期放入数组列表中,然后按日期时间排序?但随后我不知道哪个 start_time 对应于哪个 mytimes 对象...

最有效的方法是什么?

最佳答案

在适当的情况下,这是一句俏话:

    Arrays.sort(myTimes, Comparator.comparing(MyTimes::getStartDate));

让我们看看它的实际效果:

    MyTimes[] myTimes = {
new MyTimes("Polly", "2019-03-06T17:00:00Z"),
new MyTimes("Margaret", "2019-03-08T09:00:00Z"),
new MyTimes("Jane", "2019-03-01T06:00:00Z")
};

Arrays.sort(myTimes, Comparator.comparing(MyTimes::getStartDate));

Arrays.stream(myTimes).forEach(System.out::println);

输出:

Jane     2019-03-01T06:00:00Z
Polly 2019-03-06T17:00:00Z
Margaret 2019-03-08T09:00:00Z

我假设 getStartDate 返回一个 Instant 或其他类型,其自然顺序与您想要的时间顺序一致。例如:

public class MyTimes {

private String name;
private Instant startDate;

// Constructor, getters, toString, etc.
}

如果您以某种方式接收开始日期作为字符串,您可以编写一个方便的构造函数来接受开始日期的字符串。我已经在上面的代码片段中使用了这样的构造函数。一种可能性是有两个构造函数:

public MyTimes(String name, Instant startDate) {
this.name = name;
this.startDate = startDate;
}

public MyTimes(String name, String startDate) {
this(name, Instant.parse(startDate));
}

Instant 类是现代 Java 日期和时间 API java.time 的一部分。

我正在利用这样一个事实:您的字符串暂时采用 ISO 8601 格式,这是 Instant.parse 接受和解析的格式。

避免 SimpleDateFormatDate

我建议您不要使用SimpleDateFormatDate。这些类设计得很糟糕并且早已过时,尤其是前者尤其麻烦。用于解析的格式模式字符串中也存在错误:Z(发音为“Zulu”)表示 UTC,如果你不这样解析它,你将得到不正确的时间(在大多数 JVM 上) )。 Instant.parse 有效地避免了这里的任何问题。

不要将 date-tine 存储为字符串

看起来您正在将开始时间存储在对象的 String 字段中?那将是糟糕的建模。使用正确的日期时间类型。字符串用于接口(interface)。像 Instant 这样的日期时间类提供了更多的功能,例如定义排序顺序。

关于java - 按字段的日期对数组对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55064843/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com