gpt4 book ai didi

java - 按范围日期分组

转载 作者:行者123 更新时间:2023-12-04 16:23:16 31 4
gpt4 key购买 nike

我有这样的情况:

List<ObjectA> collapsed = list.stream().collect(Collectors.collectingAndThen(
Collectors.groupingBy(
ObjectA::getDate,
Collectors.maxBy(Comparator
.comparing(ObjectA::getPriority1)
.thenComparing(ObjectA::getPriority2)
.thenComparing(ObjectA::getDate)
.thenComparing(ObjectA::getId))),
map -> map.values().stream()
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList())));

它在相同的日期完美运行。我只需要为某个日期窗口分组项目:

Integer daysWindow = 90;

所以我希望在此窗口中的日期发生一切。这怎么可能?

谢谢大家!

最佳答案

您可以在开头应用过滤器,如下所示,保持其余内容相同。

LocalDate today = LocalDate.now();

list.stream().filter(obj -> !obj.getDate().isAfter(today.plusDays(90)))
.collect(Collectors.collectingAndThen(....

注意:我假设 ObjectA::getDate 的类型是 java.time.LocalDate

演示:

import java.time.LocalDate;

public class Main {
public static void main(String[] args) {
// Test
System.out.println(inRange(LocalDate.now()));
System.out.println(inRange(LocalDate.of(2021, 12, 31)));
System.out.println(inRange(LocalDate.of(2022, 2, 20)));
}

static boolean inRange(LocalDate date) {
return !date.isAfter(LocalDate.now().plusDays(90));
}
}

输出:

true
false
false

ONLINE DEMO

了解有关 modern Date-Time API 的更多信息* 来自 Trail: Date Time


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport它将大部分 java.time 功能向后移植到 Java 6 和 7。如果您正在为一个 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project .

关于java - 按范围日期分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69296325/

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