gpt4 book ai didi

java - 查找流中小于最大值几次的值

转载 作者:行者123 更新时间:2023-12-02 02:05:14 24 4
gpt4 key购买 nike

我想找到比实际最大日期早一年的第一个日期。我尝试用流来做到这一点,但我被卡住了。

List<String> intervalIdList = new HashSet();

intervalIdList.add("2018-01");
intervalIdList.add("2017-12");
intervalIdList.add("2017-11");
intervalIdList.add("2017-10");
...
intervalIdList.add("2016-12"); // this is the value I want to find

LocalDate localDateSet =
intervalIdSet.stream()
.map(s-> LocalDate.parse(s))
.sorted()
.filter(localDate -> localDate < max(localDate)) // something like max(localDate)
.findFirst();

我是否必须将最大过滤值写入流外部的变量?

最佳答案

您似乎正在查找今天之前 1 年前的最大日期:

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();
}

关于java - 查找流中小于最大值几次的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50944390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com