code: public final <E extends Throwable> A orElseThrow(Supplier<E> throwableSupplier) throws E {
          return orElseGet((CheckedSupplier<E, A>) () -> {
              throw throwableSupplier.get();
          });
      }
docs: If the value is present, return it; otherwise, throw the {@link Throwable} supplied by
  <code>throwableSupplier</code>.
  
  @param throwableSupplier the supplier of the potentially thrown {@link Throwable}
  @param <E>               the Throwable type
  @return the value, if present
  @throws E the throwable, if the value is absent