我需要你在以下场景中的建议
我有以下日期列表
def date = new Date()
def dates = [date - 350, date - 400, date - 300, date - 50, date]
我需要获取以下地图:
[2013:[1:null, 2:5, 3:10,...12:5], 2014:[1:10, 2:30...12:100], ...]
年份地图是:关键是月份,值是该月份的日期数量
我按照这种方式对它进行分组
def datesGroupedByYear = dates.groupBy { it[Calendar.YEAR] }
如何创建我描述的地图
感谢您的时间
答案 0 :(得分:2)
您可以通过向groupBy
调用添加闭包来添加更多组。日历的MONTH是一个(从0开始),所以在那里添加一个。接下来,您希望使用计数填充整月,即按结果分组的大小()。这将在每个月收集超过1..12(正确的订单和null
为缺少的组)。
def date = new Date()
def dates = [date-350, date-400, date-300, date-50, date-3, date-2, date]
def result = dates.groupBy{it[Calendar.YEAR]}{it[Calendar.MONTH]+1}.collectEntries{ o->
[o.key, (1..12).collectEntries{
[it, o.value.get(it)?.size()]
}]
}
println result
//; [2013:[1:null, 2:null, 3:null, 4:null, 5:null, 6:null, 7:null, 8:null, 9:null, 10:1, 11:null, 12:1], 2014:[1:1, 2:null, 3:null, 4:null, 5:null, 6:null, 7:null, 8:null, 9:null, 10:1, 11:3, 12:null]]
assert result[date[Calendar.YEAR]][date[Calendar.MONTH]+1]==3