java.util.function.Supplier это функциональный интерфейс Согласно определению функциональных интерфейсов, у него есть один абстрактный функциональный метод T get().
Определение Javadoc
Функциональный интерфейс: это функциональный интерфейс, и поэтому его можно использовать в качестве цели назначения для лямбда-выражения или ссылки на метод. Экземпляры функциональных интерфейсов могут быть созданы с помощью лямбда-выражений, ссылок на методы или ссылок на конструкторы.
Подпись интерфейса Поставщика, как показано ниже, представляет поставщика результатов.
@FunctionalInterface
public interface Supplier 
Здесь T — это тип результатов, предоставленных этим поставщиком.
Определение метода согласно Javadoc
T get(): Этот абстрактный метод не принимает никаких аргументов, но вместо этого возвращает вновь созданные значения T в потоке. Но не требуется, чтобы новые или отличные результаты возвращались при каждом вызове поставщика.
Теперь давайте посмотрим на пример.
Person.java
package com.test.java8;
public class Person {
    private String name;
    private int age;
    private String address;
    public Person(String name, int age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getAddress() {
        return address;
    }
    public void setDesignation(String address) {
        this.address = address;
    }
}
Person.java — это класс bean-компонентов, который мы будем использовать для предоставления данных с использованием поставщика в классе TestSupplier ниже.
TestSupplier.java
package com.test.java8;
import java.util.function.Supplier;
public class TestSupplier {
    public static void main(String[] args) {
        Supplier < Person > supplier = () - > {
            return new Person("Varun", 30, "Programmer");
        };
        Person p = supplier.get();
        System.out.println("Person Detail:\n" + p.getName() + ", " + p.getAge() + ", " + p.getAddress());
    }
}
Существуют примитивные специализации интерфейса поставщика:
IntSupplierимея один абстрактный методgetAsInt()LongSupplierимея один абстрактный методgetAsLong()DoubleSupplierимея один абстрактный методgetAsDouble()BooleanSupplierимея один абстрактный методgetAsBoolean()
Потребительский интерфейс
java.util.function.Consumer это функциональный интерфейс Как и у поставщика, у него есть один абстрактный функциональный методaccept(T t)и метод по умолчанию andThen(Consumer<? super T>
   after)
Примечание . Методы по умолчанию не являются абстрактными.
Подпись интерфейса Consumer, как показано ниже, представляет операцию, которая принимает один входной аргумент и не возвращает результата.
@FunctionalInterface
public interface Consumer 
Здесь T — тип ввода для операции.
Определение метода согласно Javadoc
void accept(T t): Этот абстрактный метод принимает один аргумент и выполняет эту операцию над данным аргументом. Это не возвращает никакого значения.
default Consumer<T> andThen(Consumer<? super T> :
   after)
default Consumer < T > andThen(Consumer << ? super T > after) {
    Objects.requireNonNull(after);
    return (T t) - > {
        accept(t);after.accept(t);
    };
}
Возвращает составного получателя, который последовательно выполняет эту операцию, после которой следует операция после. Если при выполнении какой-либо операции возникает исключение, оно передается вызывающей стороне составленной операции. Если выполнение этой операции вызывает исключение, операция после не будет выполнена.
Давайте посмотрим на пример:
package com.test.java8;
import java.util.function.Consumer;
public class TestConsumer {
    public static void main(String[] args) {
        Consumer < String > consumer1 = (arg) - > {
            System.out.println(arg + "OK");
        };
        consumer1.accept("TestConsumerAccept - ");
        Consumer < String > consumer2 = (x) - > {
            System.out.println(x + "OK!!!");
        };
        consumer1.andThen(consumer2).accept("TestConsumerAfterThen - ");
    }
}
Опять же, как и у поставщика, вот несколько примитивных специализаций интерфейса Consumer:
IntConsumerимея один абстрактный метод »accept(int)и один метод по умолчаниюdefault IntConsumer andThen(IntConsumer after)‘DoubleConsumerимея один абстрактный метод »accept(double)и один метод по умолчаниюdefault DoubleConsumer andThen(DoubleConsumer after)‘LongConsumerимея один абстрактный метод »accept(long)и один метод по умолчаниюdefault LongConsumer andThen(LongConsumer after)‘
Счастливого обучения!