如何声明日期类型的变量并根据日期排序?

How to declare the variables which are of date type and to sort based on the date?

我有交易 class,其中有到达日期、离开日期等变量,我不确定如何定义日期数据类型,因此必须根据开始日期对交易信息进行排序。我想以明确的方式将日期提供给 class。例如,我想给出 5 个日期并对其进行排序。你能告诉我怎么做吗?

public class Transaction implements Comparable<Transaction> 
{
    private Dog dogID;
    private Date startDate;
    private Date departureDate;
    private List<Integer> serviceLevel = Arrays.asList(1,2,3);
    private List<Integer> ratePerDay = Arrays.asList(89,129,149);
    private double totalcharge;
    private double deposit; 
}

tl;博士

仅使用 java.time classes,从不使用遗留 Date class.

实现Comparable接口需要的一个方法。

@Override
public int compareTo( Transaction other )
{
    return this.startDate().compareTo( other.startDate()
}

详情

Date class 都包含在 Java 中 很糟糕 ,由不懂的人设计的很糟糕 date-time处理。

如果您只需要日期,没有时间,没有时区或 offset-from-UTC 的上下文,请使用 java.time.LocalDate

private LocalDate startDate;
private LocalDate departureDate;

如果您的 class 的主要目的是透明且不变地传递数据,请将 class 定义为记录。编译器隐式创建构造函数、getter、equals & hashCodetoString.

永远不要使用像 double 这样的 floating-point 类型,因为准确性很重要,例如力矩。在准确性胜过速度的地方使用 BigDecimal

为清楚起见,列表通常应以复数形式命名。

Java 命名约定为驼峰式。所以 totalCharge.

public record Transaction
(
    Dog dogID , 
    LocalDate startDate , 
    LocalDate departureDate , 
    List<Integer> serviceLevels , 
    List<BigDecimal> ratesPerDay , 
    BigDecimal totalCharge , 
    BigDecimal deposit
) {}

如果您希望通常按开始日期成员字段排序,请使用一个必需的方法 compareTo 实现 Comparable 接口。我们通过调用 LocalDate class.

中内置的 compareTo 方法来实现该方法
public record Transaction implements Comparable < Transaction > 
(
    Dog dogID , 
    LocalDate startDate , 
    LocalDate departureDate , 
    List<Integer> serviceLevels , 
    List<BigDecimal> ratesPerDay , 
    BigDecimal totalCharge , 
    BigDecimal deposit
) 
{
    @Override
    public int compareTo( Transaction other )
    {
        return this.startDate().compareTo( other.startDate()
    }

}