guava/src/com/google/common/base/Suppliers.java
public static <F, T> Supplier<T> compose(Function<? super F, T> function, Supplier<F> supplier) {
    return new SupplierComposition<>(function, supplier);
  }
public static <F, T> Supplier<T> compose(Function<? super F, T> function, Supplier<F> supplier) {
    return new SupplierComposition<>(function, supplier);
  }
Returns a new supplier which is the composition of the provided function and supplier. In other
words, the new supplier's value will be computed by retrieving the value from {@code supplier},
and then applying {@code function} to that value. Note that the resulting supplier will not
call {@code supplier} or invoke {@code function} until it is called.