code: public void putAll(BloomFilter<T> that) {
      checkNotNull(that);
      checkArgument(this != that, "Cannot combine a BloomFilter with itself.");
      checkArgument(
          this.numHashFunctions == that.numHashFunctions,
          "BloomFilters must have the same number of hash functions (%s != %s)",
          this.numHashFunctions,
          that.numHashFunctions);
      checkArgument(
          this.bitSize() == that.bitSize(),
          "BloomFilters must have the same size underlying bit arrays (%s != %s)",
          this.bitSize(),
          that.bitSize());
      checkArgument(
          this.strategy.equals(that.strategy),
          "BloomFilters must have equal strategies (%s != %s)",
          this.strategy,
          that.strategy);
      checkArgument(
          this.funnel.equals(that.funnel),
          "BloomFilters must have equal funnels (%s != %s)",
          this.funnel,
          that.funnel);
      this.bits.putAll(that.bits);
    }
docs: Combines this Bloom filter with another Bloom filter by performing a bitwise OR of the
  underlying data. The mutations happen to <b>this</b> instance. Callers must ensure the Bloom
  filters are appropriately sized to avoid saturating them.
  
  @param that The Bloom filter to combine this Bloom filter with. It is not mutated.
  @throws IllegalArgumentException if {@code isCompatible(that) == false}
  @since 15.0