2 回答
![?](http://img1.sycdn.imooc.com/533e4c0500010c7602000200-100-100.jpg)
TA贡献1825条经验 获得超4个赞
似乎您正在寻找今天前一年的日期上限:
List<String> intervalIdList = new ArrayList<>();
intervalIdList.add("2018-01-01");
intervalIdList.add("2017-12-01");
intervalIdList.add("2017-11-01");
intervalIdList.add("2017-10-01");
intervalIdList.add("2016-12-01"); // this is the value I want to find
LocalDate localDateSet = intervalIdList.stream()
.map(LocalDate::parse)
.filter(ld -> ld.isBefore(LocalDate.now().minus(Period.of(1, 0, 0))))
.max(Comparator.comparingLong(LocalDate::toEpochDay))
.get();
System.out.println(localDateSet);
那打印 2016-12-01
请注意,我必须在日期字符串中添加天数,以匹配期望的默认格式LocalDate.parse。
由于使用了过滤器,因此显式检查可选变量以处理没有值与谓词匹配的情况可能更安全:
Optional<LocalDate> max = intervalIdList.stream()
.map(LocalDate::parse)
.filter(ld -> ld.isBefore(LocalDate.now().minus(Period.of(1, 0, 0))))
.max(Comparator.comparingLong(LocalDate::toEpochDay));
并在读取最大值之前进行检查:
if(max.isPresent()) {
LocalDate ld = max.get();
}
添加回答
举报