code: public static <T, S extends Collection<T>> Collector<S, ?, Set<T>> intersecting() {
          return new CancellableCollectorImpl<S, Box<Set<T>>, Set<T>>(Box::new, (b, t) -> {
              if (b.a == null) {
                  b.a = new HashSet<>(t);
              } else {
                  b.a.retainAll(t);
              }
          }, (b1, b2) -> {
              if (b1.a == null)
                  return b2;
              if (b2.a != null)
                  b1.a.retainAll(b2.a);
              return b1;
          }, b -> b.a == null ? Collections.emptySet() : b.a, b -> b.a != null && b.a.isEmpty(),
                  UNORDERED_CHARACTERISTICS);
      }
docs: Returns a {@code Collector} which collects the intersection of the input
  collections into the newly-created {@link Set}.
  
  <p>
  The returned collector produces an empty set if the input is empty or
  intersection of the input collections is empty.
  
  <p>
  There are no guarantees on the type, mutability, serializability, or
  thread-safety of the {@code Set} returned.
  
  <p>
  This method returns a
  <a href="package-summary.html#ShortCircuitReduction">short-circuiting
  collector</a>: it may not process all the elements if the resulting
  intersection is empty.
  
  @param <T> the type of the elements in the input collections
  @param <S> the type of the input collections
  @return a {@code Collector} which finds all the minimal elements and
  collects them to the {@code List}.
  @since 0.4.0