2014-02-06 3 views

ответ

2
persons.groupBy{it.born.date+'/'+(it.born.month+1)+'/'+(it.born.year+1900)} 

Результатом будет карта хэша.

Пусть persons=[p1,p2,p3,p4,p5]

т.е.

[ '20/11/1970':[p1,p3], 

    '15/09/1989':[p2,p4,p5] ] 
0

Легче всего было бы; учитывая Person класс:

public class Person { 
    String name 
    Date born 

    String toString() { 
     name 
    } 
} 

Мы можем составить список из них:

import groovy.time.* 

def people = use(TimeCategory) { 
    [ new Person(name: 'p1', born: new Date() - 4.days), 
     new Person(name: 'p2', born: new Date() - 2.days), 
     new Person(name: 'p3', born: new Date() - 4.days), 
     new Person(name: 'p4', born: new Date() - 2.days), 
     new Person(name: 'p5', born: new Date() - 2.days) ] 
} 

, а затем просто использовать Date.format:

people.groupBy{ it.born.format('dd/MM/yyyy') } 

Если born должен просто хранить датировать человек, а не время, вы можете изменить Person на:

public class Person { 
    String name 
    Date born 

    void setBorn(Date born) { 
     this.born = born.clearTime() 
    } 

    String toString() { 
     name 
    } 
} 

И тогда вы можете просто сделать:

people.groupBy{ it.born } 

Чтобы получить Map с Date объектов в качестве ключей:

[ Sun Feb 02 00:00:00 GMT 2014:[p1, p3], 
    Tue Feb 04 00:00:00 GMT 2014:[p2, p4, p5] ] 
Смежные вопросы