in commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/oned/RegionBSPTree1D.java [175:209]
public List<Interval> toIntervals() {
final List<BoundaryPair> boundaryPairs = new ArrayList<>();
visitInsideIntervals((min, max) -> boundaryPairs.add(new BoundaryPair(min, max)));
boundaryPairs.sort(BOUNDARY_PAIR_COMPARATOR);
final List<Interval> intervals = new ArrayList<>();
BoundaryPair start = null;
BoundaryPair end = null;
for (final BoundaryPair current : boundaryPairs) {
if (start == null) {
start = current;
end = current;
} else if (Objects.equals(end.getMax(), current.getMin())) {
// these intervals should be merged
end = current;
} else {
// these intervals should not be merged
intervals.add(createInterval(start, end));
// queue up the next pair
start = current;
end = current;
}
}
if (start != null) {
intervals.add(createInterval(start, end));
}
return intervals;
}