需求:面积及有效期范围不能重叠
int数组类型的区间判断
// <= 是两个闭区间,如果前闭后开可用<
// 判断A、B两个区间是否有重合,
public static boolean judge(int[] A, int[] B) {
return Math.max(A[0], B[0]) <= Math.min(A[1], B[1]);
}
public static void main(String[] args) {
System.out.println(judge(new int[]{1, 3}, new int[]{2, 5}));
System.out.println(judge(new int[]{1, 3}, new int[]{4, 5}));
System.out.println(judge(new int[]{3, 5}, new int[]{4, 8}));
}日期范围区间判断
/**
* 判断日期范围是否有重叠(日期到天)
*
* List<String> dates = new ArrayList<>();
* dates.add("2022-06-01,2022-09-03");
* dates.add("2022-07-01,2022-07-15");
* System.out.println("日期范围是否重叠: " + overlapping(dates));
*/
private boolean overlapping(List<String> list) {
if (list == null || list.size() <= 1) {
return false;
}
for (int i = 0; i < list.size(); i++) {
String date1[] = list.get(i).split(",");
Date beginDate1 = DateUtil.parse(date1[0]);
Date endDate1 = DateUtil.parse(date1[1]);
for (int j = i + 1; j < list.size(); j++) {
String date2[] = list.get(j).split(",");
Date beginDate2 = DateUtil.parse(date2[0]);
Date endDate2 = DateUtil.parse(date2[1]);
if (!beginDate2.before(beginDate1)) {
if (!beginDate2.after(endDate1)) {
return true;
}
} else if (!endDate2.before(beginDate1)) {
return true;
}
}
}
return false;
}自己根据需求优化写法
/**
* 判断面积或时间是否有重叠
*
* @param checkType 校验类型( area:面积区间 time:时间区间)
* @Auther: czw
* @Description:
* @Date: 2022/12/6 17:41
* @Version: 1.0
*/
public static boolean checkOverlapping(String checkType, CostConfig costConfig, List<CostConfig> list) {
if (ObjectUtil.isNotEmpty(list)) {
for (CostConfig config : list) {
if (checkType.equals("area")) {
boolean flag = NumberUtil.isLessOrEqual(NumberUtil.max(costConfig.getAreaStart(), config.getAreaStart()), NumberUtil.min(costConfig.getAreaEnd(), config.getAreaEnd()));
if (flag) {
return true;
}
} else if (checkType.equals("time")) {
if (!config.getStartTime().before(costConfig.getStartTime())) {
if (!config.getStartTime().after(costConfig.getEndTime())) {
return true;
}
} else if (!config.getEndTime().before(costConfig.getStartTime())) {
return true;
}
}
}
}
return false;
}
public static void main(String[] args) {
CostConfig costConfig = new CostConfig();
costConfig.setAreaStart(new BigDecimal(10));
costConfig.setAreaEnd(new BigDecimal(15));
costConfig.setStartTime(DateUtil.parse("2022-06-01 08:00:00"));
costConfig.setEndTime(DateUtil.parse("2022-09-03 07:59:59"));
List<CostConfig> list = new ArrayList<>();
CostConfig config1 = new CostConfig();
config1.setAreaStart(new BigDecimal(20));
config1.setAreaEnd(new BigDecimal(35));
config1.setStartTime(DateUtil.parse("2022-09-08 08:00:00"));
config1.setEndTime(DateUtil.parse("2023-01-03 07:59:59"));
list.add(config1);
CostConfig config2 = new CostConfig();
config2.setAreaStart(new BigDecimal(15));
config2.setAreaEnd(new BigDecimal(20));
config2.setStartTime(DateUtil.parse("2022-09-03 08:00:00"));
config2.setEndTime(DateUtil.parse("2022-10-03 07:59:59"));
list.add(config2);
System.out.println(checkOverlapping("area",costConfig, list));
}以上方法有其他大佬的写法及自己的一些想法
















