在 Java 中组合每月的日期数组和总和值

sgr*_*lon 1 java arrays date

我有一个日期数组作为键和值(整数)的形式:

[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)

我试图解决这个问题的方法是使用爆炸函数,然后尝试重新组合它们,但在我看来这比它需要的要复杂一些。

Jea*_*art 6

您可以使用groupingBywithYearMonth作为分类器:

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)