2017-07-30 65 views
2

假设我有简单的POJO膳食:如何制表的月和年使用Java 8的分组数据流

public class Meal 
{ 
    LocalDate mealtime; 
    int calories; 
} 

,然后在列表收集:

List<Meals> meals; 

我怎么能使用以获得一份列表,其中包含几年内每月消耗的卡路里总量。仅基于月份的表格很容易,但我想创建一个分布在几年的条形图,以比较不同时间的卡路里​​消耗量,而不仅仅是一个月。

这怎么办?我是否必须用几个月和几年使用HashMaps几年和几个月创建一些Instant Object的复杂结构,或者有更好的方法吗?

回答

4

你不喜欢这样,使用TreeMap以确保结果排序年份和月份:

Map<YearMonth, Integer> caloriesByMonth = meals.stream() 
     .collect(Collectors.groupingBy(m -> YearMonth.from(m.mealtime), 
             TreeMap::new, 
             Collectors.summingInt(m -> m.calories))); 
+0

你怎么那么排序YearMonth,这样你可以在表格排列的数据? –

+2

@StephaneGrenier我不明白你的问题。因为地图是一个'TreeMap',它已经按'YearMonth'进行了排序,当然这按年份和月份排序。 – Andreas

+0

我没有意识到这一点。我有一块大脑,完全忘了TreeMap的Tree部分,我只是在想Map。谢谢。 –