code: public static <F, T> Supplier<T> compose(Function<? super F, T> function, Supplier<F> supplier) {
      return new SupplierComposition<>(function, supplier);
    }
docs: 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.