Как сравнить локальную дату со списком локальных дат - PullRequest
0 голосов
/ 21 сентября 2019

Если у меня есть список локальных дат, и мне нужно сравнить локальную дату с этим списком и вернуть последнюю дату, предшествующую этой дате, какой будет наилучшим подходом.

Например, учитываясписок:

01/01/2019 01/01/2020 01/01/2021 01/01/2022

если я кормлю его датой 30/12/2021, то я хочуответ на запрос 01/01/2021

Я думал, что просто повторю список до тех пор, пока не найду первую дату, которой у меня не было, а затем просто верну предыдущую запись в списке (если толькоэто первая запись, в этом случае я бы ничего не возвращал)

Список дат уже отсортирован в порядке возрастания:

for (int i = 0; i < dates.size{}; i++)
{
  if (myDate.before(dates[i]) {
    if (i==0) {
      return null;
    }
    else {
      return dates[i-1];
    }
 }

}

1 Ответ

0 голосов
/ 22 сентября 2019

Попробуйте что-то вроде этого:

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

public class Main {

    public static void main(String[] args) {
        // create list with some random dates
        List<LocalDate> list = new ArrayList<>();
        list.add(LocalDate.of(2019, 3, 12));
        list.add(LocalDate.of(2019, 4, 11));
        list.add(LocalDate.of(2019, 8, 10));
        list.add(LocalDate.of(2019, 6, 9));

        System.out.println(getMostRecentBeforeDate(LocalDate.now(), list));
    }

    // this is our comparing/filtering method 
    private static LocalDate getMostRecentBeforeDate(LocalDate targetDate, List<LocalDate> dateList) {
        // we filter the list so that only dates which are "older" than our targeted date remain
        // then we get the most recent date by using compareTo method from LocalDate class and we return that date
        return dateList.stream().filter(date -> date.isBefore(targetDate)).max(LocalDate::compareTo).get();
    }
}

Если вы запустите приведенный выше код, вы должны получить 2019-08-10 в качестве вывода, поскольку это самая последняя дата перед текущей датой (LocalDate.now()).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...