Java Lambda 遍历判断 List 中是否存在连续评级数据
假设类名为 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级数据的自然月');
}
原文地址: https://www.cveoy.top/t/topic/oieA 著作权归作者所有。请勿转载和采集!