按日期字段分组的Groovy列表

时间:2014-02-06 16:07:29

标签: date groovy group-by

我有以下POGO课程

public class Person{
   String name;
   Date born;

}


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

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

2 个答案:

答案 0 :(得分: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]   ]

答案 1 :(得分: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] ]