2014-02-06 78 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] ]