2017-07-30 67 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。謝謝。 –