我有一个交易类,其中有到达日期、出发日期等变量,我不确定如何定义日期数据类型,因此交易信息必须根据开始日期进行排序。我想以明确的方式向全班提供日期。例如,我想给出 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类,切勿使用旧类Date
类。
实现Comparable
接口所需的一种方法。
@Override
public int compareTo( Transaction other )
{
return this.startDate().compareTo( other.startDate()
}
详
Java 中包含的两个Date
类都很糟糕,由不了解日期时间处理的人设计得很糟糕。
如果只需要日期,而不要使用一天中的时间,并且没有时区上下文或 UTC 偏移量,请使用java.time.LocalDate
。
private LocalDate startDate;
private LocalDate departureDate;
如果类的主要目的是透明且不可变地传达数据,请将该类定义为记录。编译器隐式创建构造函数、getter、equals
&hashCode
和toString
。
切勿使用像double
这样的浮点类型,因为精度很重要,例如时刻。使用准确性胜过速度的BigDecimal
。
为清楚起见,列表通常应以复数形式命名。
Java 命名约定是 camelCase。所以totalCharge
.
public record Transaction
(
Dog dogID ,
LocalDate startDate ,
LocalDate departureDate ,
List<Integer> serviceLevels ,
List<BigDecimal> ratesPerDay ,
BigDecimal totalCharge ,
BigDecimal deposit
) {}
如果要通常按开始日期成员字段进行排序,请使用一个必需的方法实现Comparable
接口compareTo
。我们通过调用LocalDate
类中内置的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()
}
}