我有一个像这样的groovy列表
udbmslList=[
[133, 2011-11-30 00:00:00.0],
[141, 2011-11-29 00:00:00.0],
[132, 2011-11-28 00:00:00.0],
[11, 2011-12-03 00:00:00.0],
[119, 2011-12-02 00:00:00.0],
[182, 2011-12-01 00:00:00.0],
[12, 2011-12-04 00:00:00.0]
]
如何将上面的列表排序到单个列表/地图中,或者按照日期的升序保持相同的结构(列表列表)(上面的列表中不能有2个相同的日期) 另外我想删除日期的时间部分。 感谢
答案 0 :(得分:1)
要对列表进行排序,假设它们实际上是日期,而不是显示的无效立即:
sorted = udbmslList.sort { it[1] }
使用SimpleDateFormat
或Groovy的Date
扩展程序不会删除时间。
创建一个具有相同结构但只有日期字符串元素的数组(使用一些假数据):
s = udbmslList.sort { it[1] }.collect { [it[0], it[1].format('yyyy-MM-dd')] }
=> [[141, 2012-01-26], [133, 2012-01-26], [11, 2012-01-26]]
答案 1 :(得分:0)
要对列表进行排序,请使用udbmslList.sort { it[1] }
。
要显示没有时间的日期,您可以使用类似udbmslList.each { println it[1].format('yyyy-MM-dd') }
的内容。
答案 2 :(得分:0)
假设日期是字符串,因为它们似乎是yyyy-MM-dd格式,它们可以按字典顺序排序。
def udbmslList=[
[133, "2011-11-30 00:00:00.0"],
[141, "2011-11-29 00:00:00.0"],
[132, "2011-11-28 00:00:00.0"],
[11, "2011-12-03 00:00:00.0"],
[119, "2011-12-02 00:00:00.0"],
[182, "2011-12-01 00:00:00.0"],
[12, "2011-12-04 00:00:00.0"]
]
// Get rid of the timestamp part of the date and convert into a map.
def result = udbmslList.collectEntries {
[(it[0]): it[1].split()[0]]
}
// Sort by date lexicographically.
result.sort { it.value }
assert result == [
132: "2011-11-28",
141: "2011-11-29",
133: "2011-11-30",
182: "2011-12-01",
119: "2011-12-02",
11: "2011-12-03",
12: "2011-12-04"
]
修改:如果日期为Date
个对象,则可以先按日期对列表进行排序,然后将其转换为适当格式的地图:
def result = udbmslList.sort { it[1] }
.collectEntries { [(it[0]): it[1].format('yyyy-MM-dd')] }