我有一个日期数组作为键和值(整数)的形式:
[2015-07-14] => 40
[2015-07-15] => 5
[2015-07-16] => 8
[2015-07-17] => 0
[2015-07-18] => 0
[2015-07-19] => 0
[2015-07-20] => 0
[2015-07-21] => 0
[2015-07-22] => 0
[2015-07-23] => 0
[2015-07-24] => 0
[2015-07-25] => 0
[2015-07-26] => 0
[2015-07-27] => 0
[2015-07-28] => 0
[2015-07-29] => 0
[2015-07-30] => 0
[2015-07-31] => 0
[2015-08-01] => 0
[2015-08-02] => 1
[2015-08-03] => 1
[2015-08-04] => 2
[2015-08-05] => 1
Run Code Online (Sandbox Code Playgroud)
用户可以选择开始日期和结束日期。
是否有一种快速简便的方法来组合这些日期并按月对值求和?在我的示例中,结果应该类似于:
[2015-07] => 53
[2015-08] => 5
Run Code Online (Sandbox Code Playgroud)
我试图解决这个问题的方法是使用爆炸函数,然后尝试重新组合它们,但在我看来这比它需要的要复杂一些。
您可以使用groupingBy
withYearMonth
作为分类器:
Map<LocalDate, Integer> dateValues = // ...
Map<YearMonth, Integer> res =
dateValues.entrySet()
.stream()
.collect(groupingBy(e -> YearMonth.from(e.getKey()),
summingInt(e -> e.getValue())));
Run Code Online (Sandbox Code Playgroud)