如何使用Java 8流将按月和年分组的数据制成表格

Ste*_*ier 3 java java-8 java-stream

假设我有简单的POJO餐:

public class Meal
{
    LocalDate mealtime;
    int calories;
}
Run Code Online (Sandbox Code Playgroud)

然后在List中收集:

List<Meals> meals;
Run Code Online (Sandbox Code Playgroud)

我如何使用流来获得一个总计每月消耗的卡路里的列表.根据单独的月份来制表是非常容易的,但是我想创建一个分散几年的条形图来比较卡路里随时间的消耗,而不仅仅是按月计算.

如何才能做到这一点?我是否必须使用数年和数月的HashMaps创建一些具有数月和数年的Instant对象的复杂结构,还是有更好的方法?

And*_*eas 5

你这样做,TreeMap用于确保结果按年和月排序:

Map<YearMonth, Integer> caloriesByMonth = meals.stream()
        .collect(Collectors.groupingBy(m -> YearMonth.from(m.mealtime),
                                       TreeMap::new,
                                       Collectors.summingInt(m -> m.calories)));
Run Code Online (Sandbox Code Playgroud)

  • @StephaneGrenier我不明白你的问题.因为地图是一个`TreeMap`,它已经按`YearMonth`排序,当然按月和月分类. (2认同)