Сравнение LocalDate, получение заказов между двумя датами - PullRequest
0 голосов
/ 28 мая 2018
    public List<WorkItem> getWorkItemsByDate(String startDate, String endDate) throws ParseException {
    LocalDate parsedStartDate = LocalDate.parse(startDate);
    LocalDate parsedEndDate = LocalDate.parse(endDate);
    return workItemRepository.findAll().stream().filter(w -> w.getUpdateDate().isAfter(parsedStartDate) &&
                                                w.getUpdateDate().isBefore(parsedEndDate))
                                                .collect(Collectors.toList());
}

У меня есть две даты, между которыми я хочу сравнить и найти все рабочие элементы (имеет LocalDate) для дат.У меня есть одна проблема, хотя я не могу понять, как проверить на ту же дату.Когда вы запускаете дату в моем коде, она работает нормально, пока вы не напишите дату, когда элемент был создан, тогда он не будет работать.

Как мне заставить эту работу, скажем, 2018-05-28 - 2018-05-28, если элементы были созданы в этот день, они не будут работать в моей лямбде.

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Я обычно использую «не до» в качестве короткого способа сказать «вкл или после».И наоборот:

    w -> ! w.getUpdateDate().isBefore(parsedStartDate)
            && ! w.getUpdateDate().isAfter(parsedEndDate)

В зависимости от вкуса вы, конечно, можете использовать более многословный, но и более прямой

    w -> (w.getUpdateDate().isEqual(parsedStartDate) || w.getUpdateDate().isAfter(parsedStartDate))
            && (w.getUpdateDate().isBefore(parsedEndDate) || w.getUpdateDate().isEqual(parsedEndDate))
0 голосов
/ 28 мая 2018

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

Вы можете заменить isAfter и isBefore вызовом compareTo и проверьте int возвращаемое значение.Менее ясно в коде, но все еще понятно.

.filter(w -> w.getUpdateDate().compareTo(parsedStartDate) >= 0 && w.getUpdateDate().compareTo(parsedEndDate) <= 0)
...