在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,可以考虑使用其他日期时间类库或自定义日期处理逻辑。

groovy 有一组日期怎么按照是否连续拆分成多个子集合?跨月怎么算

原文地址: https://www.cveoy.top/t/topic/i9PA 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录