groovy 有一组日期怎么按照是否连续拆分成多个子集合?跨月怎么算
在Groovy中,可以使用以下代码来将一组日期按照是否连续拆分成多个子集合,并且能正确处理跨月的情况:
import java.time.LocalDate
def dates = [
LocalDate.of(2021, 1, 1),
LocalDate.of(2021, 1, 2),
LocalDate.of(2021, 1, 4),
LocalDate.of(2021, 1, 5),
LocalDate.of(2021, 2, 1),
LocalDate.of(2021, 2, 2),
LocalDate.of(2021, 2, 4)
]
def result = []
def currentSubset = []
dates.each { date ->
if (currentSubset.empty || date.minusDays(1) == currentSubset.last()) {
// 当前日期与上一个日期连续,加入当前子集合
currentSubset.add(date)
} else {
// 当前日期与上一个日期不连续,将当前子集合加入结果集合,并重新开始一个新的子集合
result.add(currentSubset)
currentSubset = [date]
}
}
// 将最后一个子集合加入结果集合
result.add(currentSubset)
// 输出结果
result.eachWithIndex { subset, index ->
println "Subset ${index + 1}: $subset"
}
以上代码会将输入的日期按照是否连续拆分成多个子集合,并输出每个子集合。对于跨月的情况,会正确地将其分割为不同的子集合。例如,对于输入的日期列表 [2021-01-01, 2021-01-02, 2021-01-04, 2021-01-05, 2021-02-01, 2021-02-02, 2021-02-04],输出结果如下:
Subset 1: [2021-01-01, 2021-01-02]
Subset 2: [2021-01-04, 2021-01-05]
Subset 3: [2021-02-01, 2021-02-02]
Subset 4: [2021-02-04]
注意:以上代码使用了Java 8中的日期时间类 LocalDate,因此需要确保项目中已经引入了Java 8或更高版本的依赖。如果项目中没有使用Java 8,可以考虑使用其他日期时间类库或自定义日期处理逻辑。
原文地址: https://www.cveoy.top/t/topic/i9PA 著作权归作者所有。请勿转载和采集!