假设类名为 Obj,包含字段为 date 和 level,其中 level 类型为 char,表示评级。

可以采用以下代码实现:

List<Obj> list = ... ; // 初始化List

boolean result = false;

// 排序,按日期从早到晚排序
Collections.sort(list, Comparator.comparing(Obj::getDate));

// 按月分组
Map<YearMonth, List<Obj>> map = list.stream()
    .collect(Collectors.groupingBy(obj -> YearMonth.from(obj.getDate())));

// 遍历分组后的数据
for (List<Obj> monthList : map.values()) {
    int cCount = 0; // C级及以下级别数据的数量
    int dCount = 0; // D级数据的数量
    boolean flag = false; // 是否连续出现C级及以下或D级数据的标志

    for (Obj obj : monthList) {
        char level = obj.getLevel();
        if (level <= 'C') {
            cCount++;
            dCount = 0; // 如果出现C级及以下级别数据,清空D级数据的数量
        } else if (level == 'D') {
            dCount++;
            cCount = 0; // 如果出现D级数据,清空C级及以下级别数据的数量
        } else {
            cCount = 0;
            dCount = 0;
        }

        if (cCount >= 3 || dCount >= 2) {
            flag = true;
            break;
        }
    }

    if (flag) {
        result = true;
        break;
    }
}

if (result) {
    System.out.println('存在连续出现C级及以下或D级数据的自然月');
} else {
    System.out.println('不存在连续出现C级及以下或D级数据的自然月');
}
Java Lambda 遍历判断 List 中是否存在连续评级数据

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

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