private static Collection<LongRange> filterOverlappingRangeSets(Collection<LongRange> rangeSet1, Collection<LongRange> rangeSet2) { return rangeSet1.stream() .filter(range1 -> rangeSet2.stream().anyMatch(range2 -> range1 != range2 && range2.overlapsRange(range1))) .collect(Collectors.toList()); } }
/** * add range to process and add it (potentially altered) to result list of ranges. * * @param from range left boundary * @param to range right boundary */ public void addRange(long from, long to) { LongRange addedRange = new LongRange(from, to); Iterator<LongRange> it = disjointRanges.iterator(); while (it.hasNext()) { LongRange existingRange = it.next(); if (existingRange.overlapsRange(addedRange)) { it.remove(); addedRange = new LongRange(Math.min(addedRange.getMinimumLong(), existingRange.getMinimumLong()), Math.max(addedRange.getMaximumLong(), existingRange.getMaximumLong())); } } disjointRanges.add(addedRange); }