parquet-column/src/main/java/org/apache/parquet/internal/filter2/columnindex/RowRanges.java
static RowRanges union(RowRanges left, RowRanges right) {
    RowRanges result = new RowRanges();
    Iterator<Range> it1 = left.ranges.iterator();
    Iterator<Range> it2 = right.ranges.iterator();
    if (it2.hasNext()) {
      Range range2 = it2.next();
      while (it1.hasNext()) {
        Range range1 = it1.next();
        if (range1.isAfter(range2)) {
          result.add(range2);
          range2 = range1;
          Iterator<Range> tmp = it1;
          it1 = it2;
          it2 = tmp;
        } else {
          result.add(range1);
        }
      }
      result.add(range2);
    } else {
      it2 = it1;
    }
    while (it2.hasNext()) {
      result.add(it2.next());
    }

    return result;
  }
static RowRanges union(RowRanges left, RowRanges right) {
    RowRanges result = new RowRanges();
    Iterator<Range> it1 = left.ranges.iterator();
    Iterator<Range> it2 = right.ranges.iterator();
    if (it2.hasNext()) {
      Range range2 = it2.next();
      while (it1.hasNext()) {
        Range range1 = it1.next();
        if (range1.isAfter(range2)) {
          result.add(range2);
          range2 = range1;
          Iterator<Range> tmp = it1;
          it1 = it2;
          it2 = tmp;
        } else {
          result.add(range1);
        }
      }
      result.add(range2);
    } else {
      it2 = it1;
    }
    while (it2.hasNext()) {
      result.add(it2.next());
    }

    return result;
  }
static RowRanges union ( RowRanges left , RowRanges right ) { RowRanges result = new RowRanges ( ) ; Iterator < Range > it1 = left . ranges . iterator ( ) ; Iterator < Range > it2 = right . ranges . iterator ( ) ; if ( it2 . hasNext ( ) ) { Range range2 = it2 . next ( ) ; while ( it1 . hasNext ( ) ) { Range range1 = it1 . next ( ) ; if ( range1 . isAfter ( range2 ) ) { result . add ( range2 ) ; range2 = range1 ; Iterator < Range > tmp = it1 ; it1 = it2 ; it2 = tmp ; } else { result . add ( range1 ) ; } } result . add ( range2 ) ; } else { it2 = it1 ; } while ( it2 . hasNext ( ) ) { result . add ( it2 . next ( ) ) ; } return result ; }
/*
Calculates the union of the two specified RowRanges object. The union of two range is calculated if there are no
elements between them. Otherwise, the two disjunct ranges are stored separately.
For example:
[113, 241] ∪ [221, 340] = [113, 330]
[113, 230] ∪ [231, 340] = [113, 340]
while
[113, 230] ∪ [232, 340] = [113, 230], [232, 340]

The result RowRanges object will contain all the row indexes that were contained in one of the specified objects.
/ * Calculates the union of the two specified RowRanges object . The union of two range is calculated if there are no elements between them . Otherwise the two disjunct ranges are stored separately . For example : [ 113 241 ] ∪ [ 221 340 ] = [ 113 330 ] [ 113 230 ] ∪ [ 231 340 ] = [ 113 340 ] while [ 113 230 ] ∪ [ 232 340 ] = [ 113 230 ] [ 232 340 ]