code: public static void orToContainer(final BitmapStorage container,
                                       final EWAHCompressedBitmap... bitmaps) {
          if (bitmaps.length < 2)
              throw new IllegalArgumentException(
                      "We need at least two bitmaps");
          PriorityQueue<EWAHCompressedBitmap> pq = new PriorityQueue<EWAHCompressedBitmap>(
                  bitmaps.length, new Comparator<EWAHCompressedBitmap>() {
              @Override
              public int compare(EWAHCompressedBitmap a,
                                 EWAHCompressedBitmap b) {
                  return a.sizeInBytes()
                          - b.sizeInBytes();
              }
          }
          );
          Collections.addAll(pq, bitmaps);
          while (pq.size() > 2) {
              EWAHCompressedBitmap x1 = pq.poll();
              EWAHCompressedBitmap x2 = pq.poll();
              pq.add(x1.or(x2));
          }
          pq.poll().orToContainer(pq.poll(), container);
      }
docs: Uses a priority queue to compute the or aggregate.
  
  The content of the container is overwritten.
  
  This algorithm runs in linearithmic time (O(n log n)) with respect to the number of bitmaps.
  
  @param container where we write the result
  @param bitmaps   to be aggregated