【发布时间】:2021-12-28 21:01:21
【问题描述】:
是否可以使用 Java 的 Collectors.groupingBy 按过去 15 天分组?
输入:
public class Tweet {
String id;
LocalDate createdAt;
// Constructor Ignored
List<Tweet> tweets = new ArrayList(){{
add(new Tweet("1", "2021-11-17"));
add(new Tweet("2", "2021-11-16"));
add(new Tweet("3", "2021-11-14"));
add(new Tweet("4", "2021-11-13"));
add(new Tweet("5", "2021-11-12"));
add(new Tweet("7", "2021-10-09"));
add(new Tweet("8", "2021-10-08"));
add(new Tweet("9", "2021-10-07"));
add(new Tweet("10", "2021-09-02"));
add(new Tweet("11", "2021-09-01"));
...
}};
}
预期输出:
2021-11-17: (group must include 2021-11-17 + 15 days before 17th)
Tweet("1", "2021-11-17");
Tweet("2", "2021-11-16");
Tweet("3", "2021-11-14");
Tweet("4", "2021-11-13");
Tweet("5", "2021-11-12");
2021-10-09: (group to include 2021-10-09 + 15 days before 9th)
Tweet("7", "2021-10-09");
Tweet("8", "2021-10-08");
Tweet("9", "2021-10-07");
2021-09-01: (group to include 2021-09-01 + 15 days before 1st)
Tweet("10", "2021-09-02");
Tweet("11", "2021-09-01");
当前逻辑(不起作用):
主要方法:
TemporalAdjusters adjuster = TemporalAdjusters.ofDateAdjuster(d -> d.minusDays(15));
Map<LocalDate, List<Tweets>> groupByLast15Days = tweets.stream()
.collect(Collectors.groupingBy(item -> item.createdAt())
.with(adjuster)));
System.out.println(groupByLast15Days); // provides incorrect results
非常感谢任何帮助!谢谢!
【问题讨论】:
-
为什么不改用
.filter(...)? -
@blurfus - 我不认为只有
filter()可以做到这一点。Collectors.GroupBy看起来更优雅。 -
您是否要分组到长度为 15 天的存储桶中?或者过滤掉超过 15 天前的条目?
-
@LouisWasserman - 我正在尝试将它们分组为 15 天长度的存储桶。
标签: java collectors