code: public <R> R toListAndThen(Function<? super List<T>, R> finisher) {
          if (context.fjp != null)
              return context.terminate(() -> finisher.apply(toList()));
          return finisher.apply(toList());
      }
docs: Creates a {@link List} 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 List} created.
  
  <p>
  This is a terminal operation.
  
  @param <R> the type of the result
  @param finisher a function to be applied to the intermediate list
  @return result of applying the finisher transformation to the list of the
  stream elements.
  @since 0.2.3
  @see #toList()