code: @SuppressWarnings({"rawtypes", "unchecked"})
      public static <T extends LogicalElement> T or(T... bitmaps) {
          PriorityQueue<T> pq = new PriorityQueue<T>(bitmaps.length,
                  new Comparator<T>() {
                      @Override
                      public int compare(T a, T b) {
                          return a.sizeInBytes()
                                  - b.sizeInBytes();
                      }
                  }
          );
          Collections.addAll(pq, bitmaps);
          while (pq.size() > 1) {
              T x1 = pq.poll();
              T x2 = pq.poll();
              pq.add((T) x1.or(x2));
          }
          return pq.poll();
      }
docs: Uses a priority queue to compute the or aggregate.
  
  This algorithm runs in linearithmic time (O(n log n)) with respect to the number of bitmaps.
  
  @param <T>     a class extending LogicalElement (like a compressed
  bitmap)
  @param bitmaps bitmaps to be aggregated
  @return the or aggregate