Как объявить переменные типа даты и отсортировать по дате?

У меня есть класс транзакций, в котором у меня есть такие переменные, как дата прибытия, дата отъезда, я не уверен, как определить типы данных даты, поэтому информация о транзакции должна быть отсортирована на основе даты начала. Я хочу указать дату классу явным образом. Например, я хочу дать 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; 
}
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
2
0
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

тл;др

Используйте только классы Java.время, никогда не используйте устаревший класс Date.

Реализуйте один метод, требуемый интерфейсом Comparable.

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

Подробности

Оба класса Date, включенные в Java, являются ужасный, плохо спроектированными людьми, которые не понимают обработку даты и времени.

Если вам нужна только дата, без времени суток и без контекста часового пояса или смещения от UTC, используйте java.time.LocalDate.

private LocalDate startDate;
private LocalDate departureDate;

Если основной целью вашего класса является прозрачная и неизменная передача данных, определите класс как запись. Компилятор неявно создает конструктор, геттеры, 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. Мы реализуем этот метод, вызывая метод compareTo, встроенный в класс LocalDate.

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()
    }

}

Я хочу указать дату классу явным образом. Например, я хочу указать 5 дат, и вывод должен быть отсортирован. Не могли бы вы сообщить мне, как это сделать.

surya_sree 09.04.2022 19:30

@surya_sree Создайте экземпляр числа объектов Transaction, передавая значения даты конструктору. Соберите в NavigableSet, например, TreeSet. Когда вы добавляете объекты в набор, они располагаются в отсортированном порядке. Или ставьте в List и звоните List#sort. Оба подхода уже много раз обсуждались в Stack Overflow.

Basil Bourque 09.04.2022 19:38

Другие вопросы по теме