как проверить пропущенную дату из массива с помощью списка дат с помощью Java

#java #arrays #spring-boot #validation #collections

#java #массивы #spring-boot #проверка #Коллекции

Вопрос:

все, что у меня есть массив дат, который содержит 15 дней с сегодняшнего дня, я хочу проверить недостающую дату и попытаться ее распечатать…

я создаю API для интерфейсной линейчатой диаграммы chartjs для этого, пытаюсь получить количество записей за 15 дней с сегодняшнего дня, если для определенной даты нет записей или некоторые даты отсутствуют, я добавлю 0 к записям для этого, пытаюсь напечатать недостающую дату

то, что я сделал до сих пор

 import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

public class Dummy {
    public static void main(String args[]) {
        LocalDate Today = LocalDate.now();
        LocalDate checkDate = Today.minusDays(14);
        List<String> apiObj = new ArrayList<>();
        apiObj.add("2020-12-10");
        apiObj.add("2020-12-11");
        apiObj.add("2020-12-12");
        apiObj.add("2020-12-13");
        apiObj.add("2020-12-14");
//        apiObj.add("2020-12-15");
        apiObj.add("2020-12-16");
        apiObj.add("2020-12-17");
        apiObj.add("2020-12-18");
        apiObj.add("2020-12-19");
        apiObj.add("2020-12-20");
        apiObj.add("2020-12-21");
        apiObj.add("2020-12-22");
        apiObj.add("2020-12-23");
        apiObj.add("2020-12-24");


        for (int i = 0; i < apiObj.size(); i  ) {
            System.out.println("API DATA :  "   apiObj.get(i)   "  Check Date : "   checkDate);
            System.out.println("Logic Check :  "   checkDate.toString().equals(apiObj.get(i)));
            if (!checkDate.toString().equals(apiObj.get(i))) {
                System.out.println("Missing Date "   checkDate);
            }
           checkDate = checkDate.plusDays(1);
        }
    }
}
 

Все становится ложным после прокомментированной даты

ВЫВОД, который я получаю

 API DATA :  2020-12-10  Check Date : 2020-12-10
Logic Check :  true
API DATA :  2020-12-11  Check Date : 2020-12-11
Logic Check :  true
API DATA :  2020-12-12  Check Date : 2020-12-12
Logic Check :  true
API DATA :  2020-12-13  Check Date : 2020-12-13
Logic Check :  true
API DATA :  2020-12-14  Check Date : 2020-12-14
Logic Check :  true
API DATA :  2020-12-16  Check Date : 2020-12-15
Logic Check :  false
Missing Date 2020-12-15
API DATA :  2020-12-17  Check Date : 2020-12-16
Logic Check :  false
Missing Date 2020-12-16
API DATA :  2020-12-18  Check Date : 2020-12-17
Logic Check :  false
Missing Date 2020-12-17
API DATA :  2020-12-19  Check Date : 2020-12-18
Logic Check :  false
Missing Date 2020-12-18
API DATA :  2020-12-20  Check Date : 2020-12-19
Logic Check :  false
Missing Date 2020-12-19
API DATA :  2020-12-21  Check Date : 2020-12-20
Logic Check :  false
Missing Date 2020-12-20
API DATA :  2020-12-22  Check Date : 2020-12-21
Logic Check :  false
Missing Date 2020-12-21
API DATA :  2020-12-23  Check Date : 2020-12-22
Logic Check :  false
Missing Date 2020-12-22
API DATA :  2020-12-24  Check Date : 2020-12-23
Logic Check :  false
Missing Date 2020-12-23
 

Процесс завершен с кодом выхода 0

Комментарии:

1. В чем проблема? Код выглядит так, как будто он должен выполнять свою работу. Какие ошибки вы получаете / какие неожиданные результаты вы получаете?

2. После указанной даты все становится ложным ДАННЫЕ API: 2020-12-14 Дата проверки: 2020-12-14 Проверка логики: истинные ДАННЫЕ API: 2020-12-16 Дата проверки: 2020-12-15 Проверка логики: ложная Дата пропуска 2020-12-15 ДАННЫЕ API: 2020-12-17 Дата проверки: 2020-12-16 Проверка логики: ложная дата пропуска 2020-12-16 ДАННЫЕ API: 2020-12-18 Дата проверки: 2020-12-17 Проверка логики : ложная Недостающая дата 2020-12-17

3. Учитывая, что вы добавляете один день к контрольной дате каждый раз в цикле, как вы ожидаете, что он когда-нибудь совпадет после пропущенного дня?

4. это то, с чем я застрял, чтобы получить решение

Ответ №1:

Вы должны изменить эту часть своего кода

 if (!checkDate.toString().equals(apiObj.get(i))) {
            System.out.println("Missing Date "   checkDate);
   }
 

Для

 if (!checkDate.toString().equals(apiObj.get(i))) {
            System.out.println("Missing Date "   checkDate);
            i--;
   }