我有一个Map
对象的列表,看起来像这样:
year => 2016,
month => 10,
day => 11,
count => 123
我每天都有一个
startDate
<endDate
范围内的元素。我希望能够根据
startDate
和endDate
之间的间隔将这些元素简化为不同的时间分组。如果startDate
和endDate
之间的差异大于4年,我想将它们分组为年份。如果差异小于四年,但大于一年,我想将它们分为几个月。如果少于一年但大于一个月,我想分成几周。少于一个月的时间,无需分组。当我说“组”时,我的意思是我想对属于特定年份的所有内容总结
count
元素(使用上面的第一个示例),并为每年返回一张像这样的地图:year => 2016,
month => 1
day => 1
count => 9897
我知道必须有一种优雅的方法来完成此任务,但我很难将自己的大脑围绕逻辑。
最佳答案
我不明白,您可以简单地做到:
if(starDate is smaller then endDate by 4 year) {
resultMap = yourList.stream()
.collect(Collectors.groupingBy(map.get("year"),
Collectors.summingInt(map.get("count")));
}
else if(starDate is... another condition) {
resultMap = yourList.stream()
.collect(Collectors.groupingBy(map.get("month"),
Collectors.summingInt(map.get("count")));
}
// all the there cases...
以后将此结果映射到您想要的任何内容。