Groovy: 将日期列表按连续性拆分成子集合
要按照日期是否连续拆分成多个子集合,可以使用 Groovy 的日期处理和集合操作来实现。以下是一种可能的实现方法:
def dates = ['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-05', '2022-01-06', '2022-01-08', '2022-01-09']
def splitByConsecutiveDates(dates) {
def result = []
def currentSubset = []
def previousDate = null
dates.each { date ->
if (previousDate == null || isConsecutiveDate(previousDate, date)) {
currentSubset.add(date)
} else {
result.add(currentSubset)
currentSubset = [date]
}
previousDate = date
}
result.add(currentSubset)
result
}
def isConsecutiveDate(date1, date2) {
def dateFormat = new java.text.SimpleDateFormat('yyyy-MM-dd')
def d1 = dateFormat.parse(date1)
def d2 = dateFormat.parse(date2)
return (d2.time - d1.time) / (24 * 60 * 60 * 1000) == 1
}
def subsets = splitByConsecutiveDates(dates)
subsets.each { subset ->
println subset
}
在这个例子中,首先定义了一个包含多个日期的列表 dates。然后定义了一个 splitByConsecutiveDates 方法,该方法接受一个日期列表作为参数,并返回按照是否连续拆分成的多个子集合。
方法内部使用一个 result 列表来存储所有子集合,使用一个 currentSubset 列表来存储当前连续日期的子集合。还定义了一个 previousDate 变量来记录前一个日期。
接下来,使用 each 方法遍历日期列表。如果 previousDate 为空或者当前日期与前一个日期连续,将当前日期加入 currentSubset 列表。否则,将 currentSubset 列表加入 result 列表,并重新创建一个新的 currentSubset 列表。
最后,将最后一个 currentSubset 列表加入 result 列表,并返回 result 列表。
最后,通过调用 splitByConsecutiveDates 方法将日期列表拆分成多个子集合,并遍历输出每个子集合。
原文地址: https://www.cveoy.top/t/topic/jxaI 著作权归作者所有。请勿转载和采集!