/** * 区間同士の比較を行う。 * * <p>下限限界優先ロジック: 下限限界値がより小さい方を「小さい」と判断する。同一の場合は、上限限界値がより<strong>大きい</strong>方を「小さい」とする。 * ただし、空区間は他のどんな区間よりも大きい。 * * @param e1 比較対象1 * @param e2 比較対象2 * @return 同値であった場合は {@code 0}、この{@code e1}が比較対象よりも小さい場合は負数、大きい場合は正数 * @throws NullPointerException 引数に{@code null}を与えた場合 */ @Override public int compare(Interval<T> e1, Interval<T> e2) { if (e1 == null || e2 == null) { throw new NullPointerException(); } // 下限限界優先ロジック if (e1.isEmpty() && e2.isEmpty()) { return 0; } else if (e1.isEmpty()) { return 1; } else if (e2.isEmpty()) { return -1; } int upperComparance = e1.upperLimitObject.compareTo(e2.upperLimitObject); int lowerComparance = e1.lowerLimitObject.compareTo(e2.lowerLimitObject); return lowerComparance != 0 ? (lowerComparance + lowerFactor) : (upperComparance * upperFactor); }
public IntervalSequence gaps() { IntervalSequence gaps = new IntervalSequence(); if (intervals.size() < 2) return new IntervalSequence(); for (int i = 1; i < intervals.size(); i++) { Interval left = (Interval) intervals.get(i - 1); Interval right = (Interval) intervals.get(i); Interval gap = left.gap(right); if (!gap.isEmpty()) gaps.add(gap); } return gaps; }