2014-02-06 24 views
1

的分组,我有以下POGO类Groovy的名单由天日期字段

public class Person{ 
    String name; 
    Date born; 

} 


def persons=[] // List of person objects' 

如何用DATE类型的字段组列表。而是,按照出生日期将列表按照出生日期分组,而不考虑小时,分钟...

回答

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 } 

要获得MapDate对象的键:

[ Sun Feb 02 00:00:00 GMT 2014:[p1, p3], 
    Tue Feb 04 00:00:00 GMT 2014:[p2, p4, p5] ]