code: public static <T> Supplier<T> memoize(Supplier<T> delegate) {
  		return (delegate instanceof MemoizingSupplier) ? delegate : new MemoizingSupplier<>(Objects.requireNonNull(delegate));
  	}
docs: Returns a supplier which caches the instance retrieved during the first
  call to {@code get()} and returns that value on subsequent calls to
  {@code get()}. See:
  <a href="http://en.wikipedia.org/wiki/Memoization">memoization</a>
  
  <p>The returned supplier is thread-safe.
  
  <p>If {@code delegate} is an instance created by an earlier call to {@code
  memoize}, it is returned directly.