我有以下POGO课程
public class Person{
String name;
Date born;
}
def persons=[] // List of person objects'
如何按DATE类型的字段对列表进行分组。而是按出生日期对列表进行分组,而不考虑小时,分钟......
答案 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] ]