code: public <R> R toSetAndThen(Function<? super Set<T>, R> finisher) {
          if (context.fjp != null)
              return context.terminate(() -> finisher.apply(toSet()));
          return finisher.apply(toSet());
      }
docs: Creates a {@link Set} containing the elements of this stream, then
  performs finishing transformation and returns its result. There are no
  guarantees on the type, serializability or thread-safety of the
  {@code Set} created.
  
  <p>
  This is a terminal operation.
  
  @param <R> the result type
  @param finisher a function to be applied to the intermediate {@code Set}
  @return result of applying the finisher transformation to the {@code Set}
  of the stream elements.
  @since 0.2.3
  @see #toSet()