implementing a lazy Supplier in java
This is already implemented in Suppliers.memoize
method.
public static <T> Supplier<T> memoize(Supplier<T> delegate)
Returns a supplier which caches the instance retrieved during the first call to get() and returns that value on subsequent calls to get(). See: memoization
The returned supplier is thread-safe. The delegate's get() method will be invoked at most once. The supplier's serialized form does not contain the cached value, which will be recalculated when get() is called on the reserialized instance.
If delegate is an instance created by an earlier call to memoize, it is returned directly.
Apache Commons Lang has a LazyInitializer.