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之间完成这项工作,如果这些项目是在这一天创建的,那么它将无法在我的lambda中使用。
答案 0 :(得分:2)
我通常使用“不在之前”作为说“上或下”的简短方法。反过来说:
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))
答案 1 :(得分:1)
如果当天不是之前,也不是之后,那么在这些情况下它将返回假。
您可以通过拨打isAfter
来替换isBefore
和compareTo
,然后检查int
返回值。代码不太清楚,但仍然可以理解。
.filter(w -> w.getUpdateDate().compareTo(parsedStartDate) >= 0 && w.getUpdateDate().compareTo(parsedEndDate) <= 0)