我有一个Map对象的列表,看起来像这样:

year  => 2016,
month => 10,
day   => 11,
count => 123


我每天都有一个startDate <endDate范围内的元素。

我希望能够根据startDateendDate之间的间隔将这些元素简化为不同的时间分组。如果startDateendDate之间的差异大于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...


以后将此结果映射到您想要的任何内容。

08-26 01:25