判斷一系列區間值比喻 0-20 10-8 21-100 ...等等 這些區間有沒有重疊的方法:
/*** @Author Minco* @Date 15:44 2024-07-01* @Description 區間范圍*//***/
public class Interval implements Comparable<Interval> {double start;double end;public Interval(double start, double end) {this.start = start;this.end = end;}public double getStart() {return start;}public double getEnd() {return end;}@Overridepublic int compareTo(Interval other) {return Double.compare(this.getStart(), other.getStart());}}
import java.util.List;public class IntervalOverlapChecker {public static boolean hasOverlap(List<Interval> intervals) {if (intervals == null || intervals.size() < 2) {return false;}// 首先對區間按起始位置進行排序intervals.sort(null);for (int i = 1; i < intervals.size(); i++) {// 如果當前區間的起始位置小于前一個區間的結束位置,則說明有重疊if (intervals.get(i).getStart() < intervals.get(i - 1).getEnd()) {return true;}}return false;}
}
使用:
List<SpokeSetmx> mxList=spokeSet.getMxList();List<Interval> intervals = new ArrayList<>(); //校驗最小、最大for(SpokeSetmx mx:mxList){mx.setTenantId(tenantId);intervals.add(new Interval(mx.getMoney1(), mx.getMoney2()));}if(hasOverlap(intervals)) throw new BusExcep("消費范圍階梯存在重疊");
?
?