Supplier

Supplier

Do not accept any arguments but return a value.

Difference between Supplier and Callable

  1. Supplier does not throw (cannot handle exceptions) while Callable can.

    Supplier

    package java.util.function;
    
    /**
    ​ * Represents a supplier of results.
     *
    ​ * <p>There is no requirement that a new or distinct result be returned each
    ​ * time the supplier is invoked.
     *
    ​ * <p>This is a <a href="package-summary.html">functional interface</a>
    ​ * whose functional method is {@link #get()}.
     *
    ​ * @param <T> the type of results supplied by this supplier
     *
    ​ * @since 1.8
     */
    @FunctionalInterface
    public interface Supplier<T> {
    
        /**
    ​     * Gets a result.
         *
    ​     * @return a result
         */
        T get();
    }
    

    Callable

    package java.util.concurrent;
    
    /**
    ​ * A task that returns a result and may throw an exception.
    ​ * Implementors define a single method with no arguments called
    ​ * {@code call}.
     *
    ​ * <p>The {@code Callable} interface is similar to {@link
    ​ * java.lang.Runnable}, in that both are designed for classes whose
    ​ * instances are potentially executed by another thread.  A
    ​ * {@code Runnable}, however, does not return a result and cannot
    ​ * throw a checked exception.
     *
    ​ * <p>The {@link Executors} class contains utility methods to
    ​ * convert from other common forms to {@code Callable} classes.
     *
    ​ * @see Executor
    ​ * @since 1.5
    ​ * @author Doug Lea
    ​ * @param <V> the result type of method {@code call}
     */
    @FunctionalInterface
    public interface Callable<V> {
        /**
    ​     * Computes a result, or throws an exception if unable to do so.
         *
    ​     * @return computed result
    ​     * @throws Exception if unable to compute a result
         */
        V call() throws Exception;
    }
    
  2. When the helper function throws exceptions, the compiler will not let us use Suppliers. We have to use Callables. If we use Suppliers, we have to use try/catch block and handle that exception explicitly.

Tags

Collections - Infinite Lists