Groovy - 以特定方式从 g:each 输出对象

Groovy - outputs objects from a g:each in specific way

目前我正在将一组对象传递到 gsp 页面并像这样打印出来:

<g:each in="${shifts}">
    ${it.dayOfWeek}    -    <g:formatDate format="hh:mm a" date="${it.fromTime}" />    -    <g:formatDate format="hh:mm a" date="${it.toTime}" /> 
</g:each>

输出如下所示:

    Monday    -    12:30 AM    -    12:45 AM 

    Monday    -    12:00 AM    -    12:15 AM 

    Tuesday    -    12:00 AM    -    12:15 AM 

    Wednesday    -    12:00 AM    -    12:15 AM //etc

所以从上面的例子来看,在 shifts 中有两个对象,其中星期几是星期一。不管时间顺序如何,我怎样才能让对象在一周中的同一天打印出这样的东西(对于上面的例子):

    Monday    -    12:00 AM    -    12:15 AM    -    12:30 AM    -    12:45 AM 

    Tuesday    -    12:00 AM    -    12:15 AM 

    Wednesday    -    12:00 AM    -    12:15 AM 

编辑*

// Sumbitted Email
static deliverSubmittedToOwner(Schedule schedule) {
    def shifts = schedule.shifts.sort { shift -> days.indexOf(shift.dayOfWeek) }
    shifts = shifts.groupBy{shifts.dayOfWeek}
    println shifts
    sendMail(to: session.user.email, subject: 'Your Flex Schedule submitted!',
        view:'/email/schedule_submitted_to_owner',schedule:schedule,shifts:shifts)
}

您可以在轮班时使用 groupBy。这会将您的轮班日期列表变成日期列表的地图:shifts.groupBy{it.dayOfWeek}。然后迭代地图和元素(键是星期几,值是天的列表)。